2015-03-20 5 views
1

Я работаю в проекте Django, и часть функциональности - это логин пользователя, который не работает. Тот же кусок кода работал отлично 10 минут назад.
Ошибка: В шаблоне использовался csrf_token, но контекст не дал значения.
FYI, я уже пробовал использовать render() и render_to_template(), но ничего не работает. Файлы

views.pyDjango csrf_token не реализует скрытое поле

def login(request): 
    context=RequestContext(request) 
    if request.method=='POST': 
     username=request.POST.get('username') 
     password=request.POST.get('password') 
     user=auth.authenticate(username=username, password=password) 
     if user: 
      if user.is_active: 
       auth.login(request,user) 
       return render_to_response('ProjectLogging/main.html',{'user':user, 'project_list':Project.objects.all()}, context) 
      else: 
       return HttpResponse("Your account is disabled.") 
     else: 
      return HttpResponse("Invalid login credentials.") 
    return render_to_response('ProjectLogging/login.html') 

urls.py

urlpatterns=patterns('ProjectLogging', 
    url(r'^$', 'views.login', name="index"), 
    url(r'^login/$', 'views.login', name="login"), 
    url(r'^logout/$', 'views.logout', name="logout"), 
    url(r'^main/$','views.main', name="main"), 
    url(r'^(user/?P<username>\w+)$', 'views.main'), 
) 

login.html

{%extends "base.html"%} 

{%block content%} 
<h1>Sign In {%if user.is_authenticated%}{{user.username}} {%else%} user {%endif%}</h1> 
{%if form.errors%} 
    {%for error in form.errors%} 
    <p class="error">error</p> 
    {%endfor%} 
{%endif%} 
<form action="/login/" method="post"> 
    {% csrf_token %} 
    <p> 
     <label for="username">Username: </label> 
     <input type="text" name="username" value="" id="username"> 
    </p> 
    <p> 
     <label for="password">Password: </label> 
     <input type="password" name="password" value="" id="password"> 
    </p> 
    <p><input type="submit" value="Log In"></p> 
</form> 
{%endblock%} 

Спасибо.

ответ

2

Вы должны предоставить RequestContext к render_to_response() вызова или, как лучший вариант, использовать render() ярлык:

from django.shortcuts import render 

return render(request, 'ProjectLogging/login.html') 
+0

Спасибо за вашу помощь. Я положил 'context_instance = RequestContext (request)' внутри 'render_to_response()', и он сработал. Но я не знаю почему. «context» определен в моей функции входа, и тот же кусок кода работал нормально ...: S –

+0

«context» был определен, но не передан шаблону. – catavaran

Смежные вопросы