Django呈现问题

问题描述:

我在构建Django Web应用程序时遇到问题。我希望如果用户登录他的账户,他的会话应该被存储,当他再次访问登录页面时,他应该被重定向到他的主页。 这是我的代码。Django呈现问题

Views.py

from django.http import HttpResponse 
from django.shortcuts import render_to_response 
from django.contrib.auth.decorators import login_required 
from django.template import RequestContext 

def index(request): 
    return HttpResponse("Index Page") 

@login_required 
    def home(request): 
ctx = {} 
return render_to_response('auth/home.html',ctx, context_instance = RequestContext(request)) 

def login_page(request): 
    if request.user.is_authenticated(): 
     return redirect('cc_home') 
    else: 
    return render_to_response(request,'auth/cc.html') 

Urls.py

from django.conf.urls.defaults import * 
from django.contrib.auth.views import login, logout 

urlpatterns = patterns('', 
url(r'cc/', 'apps.auth.views.login_page', name = 'cc_login'), 
url(r'logout/', logout, name = 'cc_logout'), 
url(r'home/','apps.auth.views.home', name = 'cc_home'), 
) 

这里是我的模板cc.html

<form action ="." method = POST> 
     {% csrf_token %}  
     {{ form.as_p }} 
     <input type = "submit" value = "login"> 
    </form> 


</body> 

home.html的

{{ user }} 's profile 
<a href = "{% url 'cc_logout' %}">Logout</a> 

当我浏览到CC URL应该首先询问用户的凭据。成功登录后,它应该重定向到用户的家庭网址,该网址运行良好。但是,当用户再次浏览到CC url()时,他应该将其重定向到他的主页。

调试时,我发现当用户未通过身份验证时,无法呈现表单。它没有显示CC.html中提供的Django内置表单,它只是显示登录按钮。

如何渲染表单。请建议。

谢谢

可能是错误发生在login_page方法中。尝试修复它这样 DEF login_page(请求): 如果request.user.is_authenticated(): 返回重定向( 'cc_home') 否则: 选择render_to_response回报( 'AUTH/cc.html',{} context_instance = RequestContext(request)) 我相信render_to_response中的请求会导致问题

+0

是的,你是绝对正确的。我发现问题只出现在渲染语句中,但我之前尝试过,不幸的是它没有发生。 有什么建议吗? – PythonEnthusiast

但是你还没有通过任何形式的模板来渲染!您需要实例化登录表单并将其传递到模板上下文,否则{{ form }}不会引用任何内容。

+0

感谢Daniel回复。 这就是我的疑问。如何在render_to_response中传递Django的内置表单?我如何实例化它? – PythonEnthusiast

如果您替换,您应该可以使用默认表格;

url(r'cc/', 'apps.auth.views.login_page', name = 'cc_login'), 

with;

url(r'cc/', login, {template_name: 'cc.html'}), 
+0

尽管这会使login_page视图变得多余,所以您必须以另一种方式重新定向已登录的用户。 –

+0

嗨,山姆, 我已经这样做,但这并不能解决我的查询。当浏览到CC网址时,它不会将经过身份验证的用户重定向到他的HOME网址。而是浏览到CC网址本身,那不是我想要的。 有什么建议吗? – PythonEnthusiast

+0

@ user1162512试试这个; [Django:从登录页面重定向登录用户](http://stackoverflow.com/a/2320702/2576437)。看来诀窍是将请求传递到您的自定义视图中的django.contrib.auth.views.login。 –