我找不到它所以我希望有人可以帮助我。 我找到了使用
的选项TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth" )
在django(1.5)。但现在我不清楚如何使用它。我是否仍然将请求放在我的视图中,或者我可以使用此模板在我的模板中使用user_object而不使用Requestcontect发送额外的变量
例如: 我的观点:
def user_characters(request, user_id):
characters = Character.objects.filter(user=user_id)
user = User.objects.get(id=user_id)
return render_to_response('characters.html',
{'characters': characters, "user": user},
context_instance=RequestContext(request))
我的模板:
{% extends "base.html" %}
{% block mainframe %}
{% if characters|length < 3 %}
<p><a href="/users/{{ user.id }}/create/">New Character(WN)</a></p>
{% endif %}
然后是我的其余部分。
我注意到几乎每个视图中我都希望user_object随之发送。
有人可以举个例子说明这是如何运作的吗?
亲切的问候 汉斯
答案 0 :(得分:2)
django.contrib.auth.context_processors.auth
上下文处理器,您不必添加任何内容。使用RequestContext()
时,您可以使用的所有模板中都可以使用上下文变量user
。获取ID {{userd.id}}
。
要检查用户是否经过身份验证,请执行
{% if user.is_authenticated %}
{# handle authenticated user #}
{%else%}
{# handle anonymous non-authenticated users #}
{%endif%}
答案 1 :(得分:0)
如果您使用django会话和身份验证框架,则不应在网址中公开用户ID,无论如何都不需要它。您始终可以在服务器端视图中通过request.user
检查登录用户。使用上下文处理器,您应该能够使用user.desiredattribute
访问该用户,但您不应该将其用于您尝试创建的网址。
答案 2 :(得分:0)
关于此的文档对我来说非常清楚: https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.RequestContext
如果您希望上下文处理器正常运行,则必须确保使用RequestContext
实例。你可以通过在你的视图中明确地创建它,或者(在我看来更方便地)使用render
快捷方式,而不是render_to_response
,如下所示:
https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render
使用django.contrib.auth.context_processors.auth
上下文处理器后,用户将始终在上下文变量user
中可用。至少,假设您的模板使用RequestContext
实例进行渲染。
如果您拥有任何类型的受控信息,您绝对不应该信任从URL获取的变量来确定用户。使用您显示的系统,任何人都可以通过编辑URL来查看任何人的数据。这对于一个完全不安全的应用程序来说可能没问题,但是看request.user
更为正常。