【问题标题】:request variable not being returned in the Django shortcut function renderDjango快捷函数渲染中未返回请求变量
【发布时间】:2011-12-24 21:05:45
【问题描述】:

以下是我的视图文件的一部分

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 并且请求变量没有被渲染函数传递给模板。

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

这都是django-subscriptionyourlabs fork 的一部分。我之前没有使用过render shortcut,所以我不知道为什么会出现这个错误。

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    render 所做的只是确保模板使用RequestContext 呈现。反过来,这仅仅意味着上下文处理器正在运行。

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

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

    【讨论】:

    • 感谢您的信息....但正如我在上面所写的,这只是一个特定示例...我知道我可以直接访问user,但我需要访问此request context processor在其他模板中也是如此。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2021-10-19
    • 2020-02-22
    • 1970-01-01
    • 2013-10-08
    • 2022-07-22
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多