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