Django:模板上下文处理器请求变量

时间:2010-02-15 22:52:28

标签: python django

我正在尝试实施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,它可以工作,但我需要全局地进行任何视图渲染。

2 个答案:

答案 0 :(得分:1)

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

{% if request.facebook.uid %}

答案 1 :(得分:0)

这可能是一个时间问题。确保Common中间件位于设置文件中的facebook中间件之前。您可以调试并查看Facebook中间件何时修改请求以及何时调用上下文处理器。这可能会给你一些线索,说明为什么会这样。但是,正如丹尼尔所说,你总是可以在模板中使用请求对象。

相关问题