Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python reverse()不起作用_Python_Django_Django Views_Django Urls - Fatal编程技术网

Python reverse()不起作用

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

我正试图通过反向传递id。但它不起作用。我犯了这个错误

对于参数为“20”且未找到关键字参数“{}”的“reg.views.Thanke”,则相反

以下是我的视图.py:

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