表格确认

2024-04-18 16:50:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将成功提交的表单中的数据传递到一个感谢页面,然后该页面可以显示此数据。我正在尝试执行反向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,所以我觉得这可能是初学者的一个明显错误,只是我似乎无法发现它

提前谢谢


Tags: djangonamefromimportidurlmessageindex
1条回答
网友
1楼 · 发布于 2024-04-18 16:50:39

你的问题就在这里:

    return HttpResponseRedirect(reverse('contactform:thankyou', args=(entered.id,)))

thankyouurl不接受任何参数

url(r'^thankyou/$', views.thankyou, name='thankyou'),

要修复它,您应该将其更改为:

url(r'^thankyou/([0-9]*)$', views.thankyou, name='thankyou'),

使用reverse函数和argskwarg,它将其转换为一个可用的URL,如:/thankyou/24插入argsiterable中提供的参数。如果在url中使用关键字分组,还可以使用kwargs将关键字传递到url,如下所述

请看这里:https://docs.djangoproject.com/en/1.11/topics/http/urls/#example

每个regex分组都是传递给视图的参数

如果按以下方式处理url,也可以传递关键字参数:

url(r'^thankyou/(?P<pk>[0-9]*)$', views.thankyou, name='thankyou'),

在基于函数的视图中,您可以通过在视图函数签名中定义它来访问它,如下所示:

def thankyou(request, pk=None):

相关问题 更多 >