Пользовательский контекст в 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.

Как предложил Даниэль, используйте 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)) 
Другие вопросы по тегам