django的新手,来自php背景,通过民意调查应用程序演练,现在我想创建一个登录页面,但我已经有各种各样的错误。这是我感到困惑的事情。我有一个ACCOUNTS [app]并且在该目录中我有一个TEMPLATES [子文件夹],并且只有一个文件夹,也叫做ACCOUNTS。里面是我的所有模板,包括index.html。
├───migrations
│ └───__pycache__
├───templates
│ └───accounts
| ->the index.html file
└───__pycache__
<html>
<head>
<title>INDEX</title>
</head>
<body>
INDEX
</body>
</html>
当我运行url localhost:8000 / accounts /它从字面上获取index.html的内容并将其插入URL
帐户 - views.py
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, redirect, render
from django.template import RequestContext, loader
from . import LoginView
from django.contrib.auth.decorators import login_required
from django.contrib import auth
from django.core.context_processors import csrf
from django.core.urlresolvers import reverse
@login_required(login_url='/login/')
def index(request):
template = loader.get_template('accounts/index.html')
context = RequestContext(request, {
'Kitty': 5
})
return HttpResponseRedirect(template.render(context))
有人可以解释(1)为什么我当前的代码表现得像这样(2)潜在的修复?
谢谢,我愿意阅读或学习必要的东西。
答案 0 :(得分:1)
如果您想将用户重定向到另一个网址,HttpResponseRedirect
类很有用。
def index(request):
return HttpResponseRedirect("/other-url/")
在您的情况下,您已经渲染了模板上下文。因为您将呈现的模板传递给HttpResponseRedirect
,所以它将其视为要重定向到的URL。
最简单的解决方法是改为使用常规HttpResponse
。
from django.http import HttpResponse
@login_required(login_url='/login/')
def index(request):
template = loader.get_template('accounts/index.html')
context = RequestContext(request, {
'Kitty': 5
})
return HttpResponse(template.render(context))
渲染模板并返回响应非常常见,因此您可以使用render
快捷方式缩短代码。
from django.shortcuts import render
@login_required(login_url='/login/')
def index(request):
template_name = 'accounts/index.html'
context = {
'Kitty': 5
}
return render(request, template_name, context)