django context_processor在模板中无法理解

时间:2013-11-22 00:14:21

标签: django django-views

我找不到它所以我希望有人可以帮助我。 我找到了使用

的选项
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随之发送。

有人可以举个例子说明这是如何运作的吗?

亲切的问候 汉斯

3 个答案:

答案 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更为正常。