【问题标题】:Django: Template context processor request variableDjango:模板上下文处理器请求变量
【发布时间】:2010-02-15 22:52:28
【问题描述】:

我正在尝试实现django-facebookconnect,因为我需要检查用户是通过 Facebook 还是普通用户登录。

在模板中,我可以通过检查request.facebook.uid 来检查用户是否通过 facebook 登录 如:

{% if is_facebook %}
{% show_facebook_photo user %}
{% endif %}

为此,我需要将is_facebook': request.facebook.uid 传递给模板,我将在任何地方使用它,因此我想尝试将它应用到现有的模板上下文处理器并在base.html 中调用上面的snipplet,它适用于 Foo 对象:

def global_variables(request):
    from django.conf import settings
    from myproject.myapp.models import Foo
    return {'is_facebook': request.facebook.uid,'foo_list': Foo.objects.all()}

我可以在任何视图中列出 Foo 对象而不会出现任何问题,但是对于这个新的 is_facebook,它会失败,它什么也不返回。

如果我在每个视图中传递 'is_facebook': request.facebook.uid ,它可以工作,但我需要在全局范围内进行任何视图渲染。

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果您可以通过request 对象访问,为什么还需要添加一个特殊的is_facebook 布尔值?只需启用内置的django.core.context_processors.request,这将确保所有模板中都存在request,然后您可以这样做:

    {% if request.facebook.uid %}
    

    【讨论】:

      【解决方案2】:

      这可能是时间问题。确保 Common 中间件在您的设置文件中位于 facebook 中间件之前。您可能可以调试并查看 facebook 中间件何时修改请求以及何时调用上下文处理器。这可能会给你一些关于为什么会发生这种情况的线索。但是,正如 Daniel 所说,您始终可以在模板中使用 request 对象。

      【讨论】:

        猜你喜欢
        • 2011-01-15
        • 2015-11-01
        • 1970-01-01
        • 2020-04-12
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 2013-09-18
        相关资源
        最近更新 更多