Пользовательский контекст в Django
У меня проблемы с аутентификацией пользователя на моем сайте Django. У меня есть экран входа, который, кажется, работает. Когда пользователь нажимает кнопку входа в систему, я вызываю django.contrib.auth.login
и, кажется, работает нормально. Однако на последующих страницах не знают, что есть пользователь вошел в систему. Пример {% user.is_authenticated %}
ложно Есть также некоторые функции меню, которые я хочу сделать доступными для зарегистрированных пользователей, такие как 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 %}
--------- my 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))
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]
Как предложил Даниэль, используйте 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))