我的django网站的用户身份验证存在问题。我有一个似乎有用的登录屏幕。当用户单击登录时,我调用django.contrib.auth.login
,它似乎工作正常。但是在后续页面上并不知道有用户登录。示例{% user.is_authenticated %}
为false。还有一些菜单功能可供登录的用户使用,例如my-account
和logout
。除登录页面外,这些功能不可用。这真的很奇怪。
这似乎是一个用户上下文问题。但我不确定我应该如何传递上下文以确保我的登录稳定。 Does anyone know at could be going on here? Any advice?
--------- base.html的一部分------------
<!--- The following doesn't register even though I know I'm authenticated -->
{% if user.is_authenticated %}
<div id="menu">
<ul>
<li><a href="/clist">My Customers</a></li>
<li><a href="#">Customer Actions</a></li>
<li><a href="#">My Account</a></li>
</ul>
</div>
{% endif %}
---------我的views.py -----------------
# Should I be doing something to pass the user context here
def customer_list(request):
customer_list = Customer.objects.all().order_by('lastName')[:5]
c = Context({
'customer_list': customer_list,
})
t = loader.get_template(template)
return HttpResponse(t.render(cxt))
答案 0 :(得分:3)
如果您使用的是Django 1.3,则可以使用render()
快捷方式,该快捷方式会自动包含RequestContext
。
from django.shortcuts import render
def customer_list(request):
customer_list = Customer.objects.all().order_by('lastName')[:5]
return render(request, "path_to/template.html",
{'customer_list': customer_list,})
在这种情况下,您可以更进一步,并使用通用ListView
:
from django.views.generic import ListView
class CustomerList(Listview):
template_name = 'path_to/template.html'
queryset = Customer.objects.all().order_by('lastName')[:5]
答案 1 :(得分:2)
答案 2 :(得分:1)
正如Daniel Suggested所述,使用RequestContext ...或更好,只需使用render_to_response快捷方式:
from django.template import RequestContext
from django.shortcuts import render_to_response
def customer_list(request):
customer_list = Customer.objects.all().order_by('lastName')[:5]
return render_to_response(
"path_to/template.html",
{'customer_list':customer_list,},
context_instance=RequestContext(request))