【发布时间】:2018-07-19 11:27:52
【问题描述】:
我正在部署一个 django 应用程序,我有两种形式:一种用于评分,另一种用于主页中的联系人。保存模型后,它们都重定向到主页。联系表格工作正常,但评分表格保留帖子网址并且不保存模型,再次保存后,它会保存它。 例如,我在 www.site.com,然后我从评级表单发送一个发布请求,表单将我重定向到 www.site.com/rating/ 而不保存数据。然后,如果我从 www.site.com/rating/ 发送相同的表格,数据将被保存并重定向到 www.site.com/rating/rating/ (404)。联系表格可以在相同的过程中正常工作,我认为两者都是相似的。联系表格将我重定向到我想要的 www.site.com。我不知道为什么会这样。 urls.py
urlpatterns = i18n_patterns(
url(r'^admin/', admin.site.urls),
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^', include('myapp.urls')),
prefix_default_language=False
)
myapp/urls.py
urlpatterns = [
url(r'^contact/', views.contact, name='contact'),
url(r'^rating/', views.raiting, name='rating'),
url(r'^', views.index, name='home'),
]
myapp/views.py
def contact(request):
if request.method != 'POST':
raise Http404('acceding from GET')
msg = ContactForm(request.POST)
if not msg.is_valid():
context = {
'contact_errors': msg.errors
}
return render(request, 'home.html', context)
msg.save()
return redirect('home')
def rating(request):
if request.method != 'POST':
raise Http404('acceding from GET')
msg_form = OpinionForm(request.POST)
if not msg_form.is_valid():
context = {
'rating_errors': msg_form.errors
}
return render(request, 'home.html', context)
msg = msg_form.save(commit=False)
if 'picture' in request.FILES:
msg.picture = request.FILES['picture']
msg.save()
return redirect('home')
home.html 中的表单
<form action="{% url 'rating' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input name="name" type="text" class="form-control" placeholder="Your name" required>
<textarea name="text" id="" cols="30" rows="5" class="form-control" placeholder="Your comment" required></textarea>
<input name="picture" type="file" id="upload-photo">
<input type="submit" class="button" value="Send">
</form>
<form action="{% url 'contact' %}" method="post">
{% csrf_token %}
<input name="email" type="text" class="form-control" placeholder="Email" required>
<textarea name="message" id="" cols="30" rows="5" class="form-control" required placeholder="Your message"></textarea>
<input type="submit" class="button" value="Send">
</form>
【问题讨论】:
-
第一次提交时检查评分表是否真的有效。可能是表单无效,然后模板的表单操作属性将您发送到
site/rating,然后表单有效并且表单操作通过将您发送到site/rating/rating再次执行此操作。 -
我查过了,表格有效
标签: python django url redirect