我正在尝试将成功提交的表单中的数据传递到一个感谢页面,然后该页面可以显示此数据。我正在尝试执行反向HttpResponseRedirect,但不断出现以下错误:
NoReverseMatch at/contactform/process 相反,找不到参数“(24,)”的“thankyou”。已尝试1个模式:[u'contactform/thankyou/$']
以下是我目前掌握的代码:
视图.py
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.views import generic
from .models import Contact_Object
def index(request):
template_name = 'contactform/index.html'
return render(request, 'contactform/index.html')
def thankyou(request, entered_id):
contact_info = get_object_or_404(Contact_Object, pk=contact_object_id)
template_name = 'contactform/thankyou.html'
return render(request, 'contactform/thankyou.html', {name: contact_info.name})
def process(request):
entered_name = request.POST['fullname']
entered_email = request.POST['email']
entered_message = request.POST['message']
entered = Contact_Object(name=entered_name, email=entered_email, message=entered_message)
entered.save()
entered_id = entered.id
return HttpResponseRedirect(reverse('contactform:thankyou', args=(entered.id,)))
url.py
from django.conf.urls import url
from . import views
app_name = 'contactform'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^thankyou/$', views.thankyou, name='thankyou'),
url(r'^process$', views.process, name='process'),
]
表单模板
<H1>Contact Form</H1>
<FORM action="{% url 'contactform:process' %}" method="post">
{% csrf_token %}
Full Name:<br>
<input type="text" name="fullname"><br>
Email:<br>
<input type="text" name="email" ><br>
Message:<br>
<textarea name="message" cols="40" rows="5"></textarea>
<input type="submit" value="Enter">
</FORM>
感谢页面模板
<h1>Thank You</h1>
<p>Thank you, {% contact_info.name %}</p>
我刚接触Python/Django,所以我觉得这可能是初学者的一个明显错误,只是我似乎无法发现它
提前谢谢
你的问题就在这里:
thankyou
url不接受任何参数要修复它,您应该将其更改为:
使用
reverse
函数和args
kwarg,它将其转换为一个可用的URL,如:/thankyou/24
插入args
iterable中提供的参数。如果在url中使用关键字分组,还可以使用kwargs
将关键字传递到url,如下所述请看这里:https://docs.djangoproject.com/en/1.11/topics/http/urls/#example
每个regex分组都是传递给视图的参数
如果按以下方式处理url,也可以传递关键字参数:
在基于函数的视图中,您可以通过在视图函数签名中定义它来访问它,如下所示:
相关问题 更多 >
编程相关推荐