请求变量未在Django快捷方式函数渲染中返回

时间:2011-12-24 21:05:45

标签: django django-templates django-views django-apps

以下部分视图文件

def user_detail(request, username,
    template_name='auth/user_detail.html', extra_context=None):
    context = {
        'user': shortcuts.get_object_or_404(User, username=username)
    }
    context.update(extra_context or {})
    return shortcuts.render(request, template_name, context)

我模板的一部分是

 <ul class="nav">
    {% if request.user.username != 'steve' %}
    <li>
        <a href="{% url 'user_detail' 'steve' %}">Steve</a>
    </li>
    {% endif %}
    {% if request.user.username != 'james' %}
    <li>
        <a href="{% url 'user_detail' 'james' %}">James</a>
    </li>
    {% endif %}
</ul>

然而,即使我使用这些用户中的任何一个登录,我仍然会显示此链接。这是因为我正在检查request.user.username并且请求变量未通过render函数传递给模板。

如果我直接引用为user.username,那么它很好,但这不是我想解决这个问题的方法,因为还有其他类似的视图会返回我必须使用的request变量。

这只是django-subscription yourlabs fork的一部分。我之前没有使用过render shortcut因此我不知道为什么会收到此错误。

任何帮助都将深受赞赏。

1 个答案:

答案 0 :(得分:2)

所有render确实会确保使用RequestContext呈现模板。反过来,这只意味着运行上下文处理器。

request上下文处理器为not enabled by default。如果需要,您必须自己将其添加到settings.CONTEXT_PROCESSORS。但是,在您的情况下,您实际上并不需要它,因为您只对用户感兴趣 - auth processor将此作为user变量提供。

总而言之,将request.user改为user,一切都会好起来。