需求介绍:
所有页面需要检测用户是否登陆,并渲染 登录|注册 或是用户名。
动手写个上下文渲染器
1.项目路径
zqxt ├── blog │ ├── __init__.py │ ├── admin.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── zqxt ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
2.在 zqxt/zqxt/ 这个目录下(与settings.py 在一起)新建一个 context_processor.py
from django.conf import settings as original_settings def settings(request): return {'settings': original_settings} def ip_address(request): return {'ip_address': request.META['REMOTE_ADDR']}
3.我们把新建的两个 上下文渲染器 加入到 settings.py 中
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'zqxt.context_processor.settings', 'zqxt.context_processor.ip_address', ], }, }, ]
我们仅需在模板中使用这些context中的变量即可。我们在view中的context并不会被影响到,但使用上下文渲染器将会导致缓存优化困难的问题。