无法调用自定义上下文处理器

8 投票
1 回答
3780 浏览
提问于 2025-04-15 19:48

我正在尝试创建一个自定义的上下文处理器,用来为登录用户显示一个菜单项列表。我已经做了以下几步:


在我的 settings.py 文件中,我添加了:

TEMPLATE_CONTEXT_PROCESSOR = (
    'django.contrib.auth.context_processors.auth',
    'mysite.accounts.context_processors.user_menu',
)

在账户的子模块中,我有一个叫 context_processors.py 的文件,目前里面是这样的:

def user_menu(request):
    return {'user_menu':'Hello World'}

在我的模板页面上,我有以下内容:

{% if user.is_authenticated %}
Menu
{{user_menu}}
{% endif %}

调用的视图是这样的:

def profile(request):
    return render_to_response('accounts/profile.html',context_instance=RequestContext(request))

但是我无法让 {{user_menu}} 在页面上显示任何内容,我知道用户是经过认证的,因为模板中其他类似的检查都能正常显示。是不是我漏掉了什么?请帮帮我,谢谢!

编辑:谢谢 Ben 和 Daniel,我已经修正了 TEMPLATE_CONTEXT_PROCESSOR 中的 (S),不过现在 Django 在解析模块时遇到了问题,我收到了以下信息:

Error importing request processor module django.contrib.auth.context_processors: "No module named context_processors"

更新:我通过将路径改为 django.core.context_processors.auth 解决了这个问题。看起来模块的位置有变动。

1 个回答

5

设置的名称应该是 TEMPLATE_CONTEXT_PROCESSORS,注意要有个S。

撰写回答