我正在尝试实施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,它可以工作,但我需要全局地进行任何视图渲染。
答案 0 :(得分:1)
如果您可以通过request
对象进行访问,为什么还需要添加一个特殊的is_facebook
布尔值?只需启用内置django.core.context_processors.request
,这将确保所有模板中都存在request
,然后您就可以执行此操作:
{% if request.facebook.uid %}
答案 1 :(得分:0)
这可能是一个时间问题。确保Common中间件位于设置文件中的facebook中间件之前。您可以调试并查看Facebook中间件何时修改请求以及何时调用上下文处理器。这可能会给你一些线索,说明为什么会这样。但是,正如丹尼尔所说,你总是可以在模板中使用请求对象。