扩展模板时,Django用户未经过身份验证

时间:2013-11-15 12:09:00

标签: python html django templates authentication

如何将data_dictionary始终保留在模板中? (也许不是正确的问题)。 用户应始终进行身份验证 解释: 这是所有其他模板扩展的基本模板。无法从所有其他模板向base.html发送数据,以便if语句可以正常工作。通过阅读base.html可以理解前端部分。该应用程序的所有其他模板将显示在上下文中,并且在右侧栏中,可以查看用户是否登录或进行某些操作。但是我无法到达那里。有效的唯一网址是/ loggedin。您是否有想法如何使此计划有效?它的东西非常简单,但我不能用django到达那里。我被告知没有理由使用SESSIONS进行用户身份验证。需要帮忙。 Plz很简单,因为你可以看到我是Django和python的菜鸟。 谢谢

base.html:

<body>
<div id="page">

<div id="sidebar">
    {% block sidebar %}
    <ul>
        <li><a href="/notes/all">Notes</a></li>

    </ul>
    {% endblock %}
</div>

<div id="rightsidebar">
    {% block rightsidebar %}

        {% if request.user.is_authenticated  %}
            Loggedin
        {% else %}
            Not Loggedin
        {% endif %}


    {% endblock %}
</div>

<div id="content">
    {% block content %}This is the content area{% endblock %}


</div>

</body>

Views.py: ....

def loggedin(request):
    my_data_dictionary = {}
    return render_to_response('base.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))

...

3 个答案:

答案 0 :(得分:0)

我认为你应该深入了解自己的context processor

同样在view.py

def loggedin(request):
my_data_dictionary = {}
return render_to_response('base.html',
                      my_data_dictionary,
                      context_instance=RequestContext(request))

将此“my_data_dictionary”添加到var:{{value}}和{{user.username}}更多信息authentication

答案 1 :(得分:0)

确保这在您的设置中:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    ....

您可以在模板中使用{%if user.is_authenticated%}和{{user.username}}。

答案 2 :(得分:0)

我想办法做到这一点。我使用会话来永久存储my_data_dictionary,但是任何视图args.So现在我可以在我想要的任何视图中获取它并将其渲染回任何视图 - &gt;扩展base.html的模板,而不是同一模板中的特殊性。 [解决]

views.py.def_loggedin

def loggedin(request):
    my_data_dictionary = {}
    request.session['my_data_dictionary '] = my_data_dictionary <----------------------
    return render_to_response('loggedin.html',
                           my_data_dictionary,
                           context_instance=RequestContext(request))

任何其他观点。

def notes(request):

    language = 'en-us'


    if 'lang' in request.COOKIES:
        language = request.COOKIES['lang']


    args = {}
    args.update(csrf(request))

    args['notes'] = Note.objects.all()
    args['language'] = language
    args['my_data_dictionary'] =  request.session['my_data_dictionary '] <-------



    return render_to_response('notes.html',
                                      args,
                                context_instance=RequestContext(request)) <---------