Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 扩展模板时未对Django用户进行身份验证_Python_Html_Django_Templates_Authentication - Fatal编程技术网

Python 扩展模板时未对Django用户进行身份验证

Python 扩展模板时未对Django用户进行身份验证,python,html,django,templates,authentication,Python,Html,Django,Templates,Authentication,如何将数据字典始终保留在模板中?(可能不是正确的问题)应始终对用户进行身份验证 解释: 这是由所有其他模板扩展的基础模板。不可能从所有其他模板将数据发送到base.html,以便if语句能够工作。前端部分可以通过读取base.html来理解。应用程序的所有其他模板将显示在上下文中,右侧栏中可以查看用户是否登录并执行一些操作。但是我到不了那里。唯一有效的url是/loggedin。你有办法让这个计划奏效吗?这很简单,但我无法用django实现,而且我被告知没有理由使用会话进行用户身份验证。我需要帮

如何将数据字典始终保留在模板中?(可能不是正确的问题)应始终对用户进行身份验证 解释: 这是由所有其他模板扩展的基础模板。不可能从所有其他模板将数据发送到base.html,以便if语句能够工作。前端部分可以通过读取base.html来理解。应用程序的所有其他模板将显示在上下文中,右侧栏中可以查看用户是否登录并执行一些操作。但是我到不了那里。唯一有效的url是/loggedin。你有办法让这个计划奏效吗?这很简单,但我无法用django实现,而且我被告知没有理由使用会话进行用户身份验证。我需要帮助。请简单一点,因为你们可以看到我是Django和python的noob谢谢

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>

我想你应该自己深入研究一下

也在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}更多信息

请确保这在您的设置中:

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

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

我找到了一种方法。我使用session来永久存储我的\u data\u字典,但它包含任何视图参数。因此,现在我可以在我想要的任何视图中获取它,并将其渲染回扩展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 loggedin(请求):
my_data_dictionary={}

session['my_data_dictionary']=my_data_dictionary No在base.html中工作正常。但是base.html被另一个模板扩展->url->视图不起作用,因为我不从其他视图返回数据。我希望看到您登录并发送my_data_dictionary,这对所有其他视图都是必要的。问题是,所有视图都应该包含
context_实例
行。这怎么办不到呢?我认为这是错误的逻辑。应该是另一种方式。我不知道你的意思。我的评论是正确的:如果您想在模板中显示用户状态,所有视图都应该包含
context\u instance=RequestContext(request)
,或者使用
render(request,template,context)
快捷方式。请阅读上面的user fast plz评论。我不确定是否理解。如果您想在所有模板中使用数据字典,那么您可能需要编写自己的上下文处理器?当模板被扩展时,它对他们可用的上下文没有影响。你有什么建议吗?这样右边的栏就可以工作了。大学教师;Don’别告诉我在django没有办法做我想做的事?如果在php中,这将是小菜一碟。但我需要使用python-django来实现这一点。它不是对所有视图都有效,而是一个开始?现在你明白我需要什么了吗???
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)) <---------