Django - 如何从模板访问会话状态

时间:2012-08-31 15:40:34

标签: django django-templates django-sessions

我想为索引页面上的每个帖子添加“编辑”链接。但在显示此链接之前;我需要检查会话是否已注册。我的意思是我需要这样的东西:

{% if session.name=='blabla' %}
    <a href="#">Edit</a>
{% endif %}

我在模板上下文处理器上有 django.core.context_processors.request

谢谢

编辑:

这是我的详细信息页面视图:

def singlePost(request,postslug):
    post = get_object_or_404(Post, slug=postslug)
    context = {'post':post}
    return render_to_response('detail.html',context,context_instance = RequestContext(request))

当我尝试这个时:

def singlePost(request,postslug):
    session=request.session['loggedin']
    post = get_object_or_404(Post, slug=postslug)
    context = {'post':post}
    return render_to_response('detail.html',context,context_instance = RequestContext(request,{'session':'session',}))

它给出了模板语法错误(渲染错误)

我试过这个:

{% if request.session.name=='blablabla' %}

这是错误:

TemplateSyntaxError at /post/viva-barca

Could not parse the remainder: '=='djangoo'' from 'request.session.name=='djangoo''

2 个答案:

答案 0 :(得分:2)

如果您使用django.core.context_processors.request并且模板使用RequestContext呈现,那么您可以访问请求中的会话。

{% if request.session.name == 'blabla' %}
    <a href="#">Edit</a>
{% endif %}

编辑:

render快捷方式和通用视图会自动使用RequestContext。如果您正在使用render_to_response,则需要使用context_instance参数传递。这在RequestContext https://docs.djangoproject.com/en/1.4/ref/templates/api/#subclassing-context-requestcontext

的文档中有详细说明

答案 1 :(得分:0)

我发现了一种不同的方式。

{% if post.owner == user %}

        <div class="right"><a href="{% url editpost post.id %}">Edit</a></div>

        {% endif %}
以这种方式;我也可以控制用户身份验证。因为有许多用户拥有自己的帐户和在index.html中列出的帖子。如果我不写这个控件; x用户可以编辑其他y用户的帖子。但现在只有登录用户才能编辑自己的帖子。

如果没有任何登录用户; &#39; EDIT&#39;链接未显示。