【问题标题】:Django rendering issueDjango 渲染问题
【发布时间】:2013-07-11 23:51:35
【问题描述】:

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

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')

网址.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 时,它应该首先询问用户的凭据。成功登录后,它应该重定向到用户的主页 url,运行正常。但是,当用户再次浏览到 CC url() 时,他应该被重定向到他的主页。

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

如何呈现表单。请建议。

谢谢

【问题讨论】:

    标签: django django-sessions


    【解决方案1】:

    但是您还没有将任何表单传递给模板进行渲染!您需要实例化登录表单并将其传递给模板上下文,否则{{ form }} 不会引用任何内容。

    【讨论】:

    • 感谢丹尼尔的回复。这正是我的疑问。如何在 render_to_response 中传递 Django 的内置表单?如何实例化它?
    【解决方案2】:

    如果你替换,你应该可以使用默认表单;

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

    与;

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

    【讨论】:

    • 虽然这使得 login_page 视图变得多余,所以我猜你必须以另一种方式重定向已经登录的用户。
    • 嗨,Sam,我已经这样做了,但这并不能解决我的问题。当浏览到 CC url 时,它不会将经过身份验证的用户重定向到他的 HOME url。相反,它浏览到 CC url 本身,这不是我想要的。有什么建议吗?
    • @user1162512 试试这个; Django: Redirect logged in users from login page。看来诀窍是将请求传递给自定义视图中的 django.contrib.auth.views.login。
    • 嗨,Sam,我浏览了这个帖子。应用了一些更改。但现在它说异常类型:TemplateDoesNotExist 异常值:registration/login.html
    • 我在代码的任何时候都没有使用 login.html。我认为它是内置模板。请帮我调试它。谢谢
    【解决方案3】:

    可能是 login_page 方法中的错误。尝试像这样修复它 def login_page(请求): 如果 request.user.is_authenticated(): 返回重定向('cc_home') 别的: return render_to_response('auth/cc.html',{} context_instance = RequestContext(request)) 我相信您的 render_to_response 中的请求会导致问题

    【讨论】:

    • 是的,你完全正确。我已经确定问题仅存在于渲染语句中,但我之前已经尝试过,不幸的是它没有发生。有什么建议吗?
    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2017-05-14
    • 2020-02-28
    • 1970-01-01
    相关资源
    最近更新 更多