Python reverse()不起作用
我正试图通过反向传递id。但它不起作用。我犯了这个错误 对于参数为“20”且未找到关键字参数“{}”的“reg.views.Thanke”,则相反 以下是我的视图.py:Python reverse()不起作用,python,django,django-views,django-urls,Python,Django,Django Views,Django Urls,我正试图通过反向传递id。但它不起作用。我犯了这个错误 对于参数为“20”且未找到关键字参数“{}”的“reg.views.Thanke”,则相反 以下是我的视图.py: from django.http import HttpResponse, Http404, HttpResponseRedirect from django.core.urlresolvers import reverse from reg.models import registration, registrationfo
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.core.urlresolvers import reverse
from reg.models import registration, registrationform
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
def registration(request):
if request.method == 'POST':
form = registrationform(request.POST)
if form.is_valid():
data = form.save()
id = data.id
return thanks(request,id)
else:
form = registrationform()
return render_to_response('registration.html', {'form' : form}, context_instance=RequestContext(request))
def thanks(request, id):
p = get_object_or_404(registration, pk=id)
return render_to_response('thanks.html', {'reg' : p})
这是我的URL.py:
from django.conf.urls import patterns, include, url
url(r'^registration/$', 'reg.views.registration'),
url(r'^thanks/$', 'reg.views.thanks'),
url(r'^$','django.views.generic.simple.direct_to_template', {'template' : 'index.html'}),
)
这里是Thanke.html:
<html>
<body>
<p>Thank you for registration mr.{{reg.username}}</p>
</body>
</html>
谢谢。来自此链接django教程: 例如:
def myview(request):
return HttpResponseRedirect(reverse('arch-summary', args=[1945]))
因此,您的代码将转到:
在URL.py中:
url(r'^thanks/(?P<id>\d+)$', 'reg.views.thanks', name='my_thanks_url')
这条线
return HttpResponseRedirect(reverse('reg.views.thanks', args=(id,)))
正在尝试构造指向您的view reg.views.Thank的url,id变量用作参数
这一行在url.py中
url(r'^thanks/$', 'reg.views.thanks'),
没有该参数的任何位置
您需要弄清楚的第一件事是,您是否真的要向浏览器发送HTTP重定向,以告诉它转到“谢谢”页面。如果您真的这样做了,那么您需要一种在URL中发送该id的方法。您可以按照@moguzalp的建议,将其作为URL路径本身的一部分来执行,也可以将其放入查询字符串中,如
/thanks/?id=12345
或者你也可以做其他事情,比如在用户的会话中隐藏id,当他们请求感谢页面时将其取出。不过,这有点复杂
如果您实际上不需要发出HTTP重定向,那么没有什么可以阻止您从view函数内部调用Thank函数,如下所示:
def registration(request):
if request.method == 'POST':
form = registrationform(request.POST)
if form.is_valid():
data = form.save()
id = data.id
return thanks(request, id)
else:
form = registrationform()
return render_to_response('registration.html', {'form' : form}, context_instance=RequestContext(request))
URL不会在浏览器中更改,但会使用正确的ID,并且不需要出现在URL、查询参数或会话中的任何其他位置感谢您的URL模式没有数字ID的正则表达式模式。我已经完成了最后显示的代码。但它显示:“function”object没有属性“\u default\u manager”回溯来自:return thanksrequest,id和p=get\u object\u或\u 404registration,pk=idYour thanker函数正在调用get\u object\u或\u 404,并将注册作为模型名传入,但您已经在该文件中重新定义了注册作为函数。给其中一个起一个不同的名字,它就会起作用。
/thanks/?id=12345
def registration(request):
if request.method == 'POST':
form = registrationform(request.POST)
if form.is_valid():
data = form.save()
id = data.id
return thanks(request, id)
else:
form = registrationform()
return render_to_response('registration.html', {'form' : form}, context_instance=RequestContext(request))