Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.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
Django:将会话值发送到可扩展html模板_Html_Django_Session_View - Fatal编程技术网

Django:将会话值发送到可扩展html模板

Django:将会话值发送到可扩展html模板,html,django,session,view,Html,Django,Session,View,一方面,我有一个navbar.html模板,可以被其他几个html模板扩展。另一方面,在我的视图中,我有一个登录系统,当用户登录时,我会用用户名创建一个会话值。我想将此会话值发送到navbar html,但不呈现此模板。我怎么能这样做 登录到view.py name = form.cleaned_data.get('name') password = form.cleaned_data.get('password') user = Users.objects.filter(name=name,

一方面,我有一个navbar.html模板,可以被其他几个html模板扩展。另一方面,在我的视图中,我有一个登录系统,当用户登录时,我会用用户名创建一个会话值。我想将此会话值发送到navbar html,但不呈现此模板。我怎么能这样做

登录到view.py

name = form.cleaned_data.get('name')
password = form.cleaned_data.get('password')
user = Users.objects.filter(name=name, password=password)

if user.count() > 0:
    request.session['user'] = user.name

    return redirect("store/")

else:
    messages.info(request, 'Invalid credentials')
    return redirect("/login/")

返回重定向(“store/”重定向到扩展navbar.html的store.html。我想将
request.session['user']
发送到navbar.html

当呈现多个相互扩展的模板时,Django将它们视为单个合并页面。在一个系统中可用的任何东西在另一个系统中也可用。如果您将会话信息传递给模板,它也会自动出现在导航栏中。您所要做的就是添加一些条件逻辑,以防止在没有会话信息的情况下打开导航栏时引发错误

在您看来,您必须在上下文中包含会话信息

#view
context['session'] = request.session
并使用该上下文呈现模板

#view
return render(request, "template.html", context)
然后,您可以在模板中自由访问
{{session}
。要在导航栏中显示它并且不弹出错误,只需添加一条if语句:

#navbar.html    
{% if session %} Welcome back {{ session.user }} {% endif %}
考虑一下,如果您想要显示的所有信息都是关于当前登录用户的,那么您可能不需要执行任何操作。只需使用任何基于类的视图(我不确定基于函数的视图,因为我很少使用它们),在模板中,您可以始终引用
{{user}}
及其所有属性,而无需通过上下文变量手动将其传递给模板

在某种程度上,DTL中登录的用户是全局的

在这种情况下,你可以简单地选择

#navbar.html
{% if user.is_authenticated %}
    <p>Hello, {{ user.first_name }} {{ user.last_name }}!</p>
{% else %}
    <p>Hello, guest!</p>
{% endif %}
#navbar.html
{%if user.u经过身份验证%}
你好,{{user.first\u name}{{user.last\u name}}

{%else%} 你好,客人

{%endif%}
请稍候,是否在数据库中存储原始用户密码?不要那样做!密码应该是散列的。