我正在使用django 1.9。在我的设置文件中,我已经添加了我的应用程序自定义上下文处理器:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
'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',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
'my_app.context_processors.init',
],
},
},
]
我的app中的context_processors.py文件是这样的:
def init(request):
profile = getattr(request, 'profile', None)
if profile is None:
profile_info = models.Profile.objects.get(user=request.user)
profile = profile_info.user_type
context = {
"profile": profile,
}
return context
在我的模板中,我调用帮助文件来获取自定义上下文文件的字典内容,以便获取用户配置文件类型。帮助文件是这样的:
from django.template import RequestContext
def get_base_context(request):
context = RequestContext(request).dicts[-1] # Last context processor
return context
在我的模板中,当我尝试检索自定义上下文时,它什么都不返回。
def view(request):
c = get_base_context(request)
raise ValueError(c)
返回{}
我不知道我做错了什么,但如果有人能指出,我会很感激。
我想在多个模板中使用它的方法是获取登录用户的配置文件类型。
例如:
{%if profile == "profile1" %}
do something
{% elif profile == "profile2" %}
do something else
{% else %}
do something else 2
{% endif %}
所以我试图通过模板上下文设置配置文件的原因是我不是要查询每个视图的用户配置文件类型。可能有更好的方法来创建会话,但我想采用这种方法。
让我知道。感谢