Dav*_*542 16 python django django-urls django-views
我创建了一个基本的联系表单,当用户提交信息时,它应该重定向到Thank You页面.
这是我在views.py文件中的代码:
def contact(request):
# if no errors...
return HttpResponseRedirect('/thanks/')
Run Code Online (Sandbox Code Playgroud)
这是我在urls.py文件中的urlpatterns中所拥有的:
(r'^contact/$', contact),
(r'^contact/thanks/$', contact_thanks),
Run Code Online (Sandbox Code Playgroud)
这两个页面都在硬编码的URL上工作.但是,当我在/ contact /上提交表单时,它会重定向到/ contact(没有结束斜杠),这是一个不存在的页面(404或错误页面告诉我需要斜杠).它没有正确重定向的原因是什么,我该如何解决?谢谢.
更新:返回HttpResponseRedirect('/ contact/thanks /')是我现在拥有的,但问题是提交按钮(使用POST)不会重定向到URL - 它根本不重定向.
vad*_*vad 22
它不是应该重定向的POST按钮,而是视图.
如果没有不同的指定,表单(HTML表单标签)POST到同一个URL.如果表单在/ contact /上,则POST/on /(带或不带斜杠,它是相同的).
在视图中,您应该重定向到感谢.来自doc:
def contact(request):
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/thanks/') # Redirect after POST
else:
form = ContactForm() # An unbound form
return render_to_response('contact.html', {
'form': form,
})
Run Code Online (Sandbox Code Playgroud)
换/thanks/到/contact/thanks/,你就完成了.
ali*_*our 11
所有的回答都是正确的,但更好的方法是给你的网址命名,urls.py并在具有反向功能的视图中提示它们(而不是在视图中硬编码网址).
在url.conf中:
(r'^contact/$', contact, name='contact'),
(r'^contact/thanks/$', contact_thanks, name='thanks'),
Run Code Online (Sandbox Code Playgroud)
并在这样的视图中提示他们:
from django.urls import reverse
return HttpResponseRedirect(reverse('app_name:thanks'))
Run Code Online (Sandbox Code Playgroud)
这对于未来的方法更好,并遵循Django的DRY原则.
小智 5
我相信除了Aviral Dasgupta的解决方案之外,OP还需要更改相对URL.
return HttpResponseRedirect('/thanks/')
Run Code Online (Sandbox Code Playgroud)
至
return HttpResponseRedirect('/contact/thanks/')
Run Code Online (Sandbox Code Playgroud)
/thanks/应该把网址带到root:yoursite/thanks/而不是yoursite/contact/thanks/.
| 归档时间: |
|
| 查看次数: |
72941 次 |
| 最近记录: |