【发布时间】:2017-08-01 11:38:50
【问题描述】:
我有一个非常简单的联系我们表格,但success_url 不起作用。成功提交表单后,页面未重定向到主页。
我已按照此处提供的文档https://docs.djangoproject.com/en/1.10/topics/class-based-views/generic-editing/
class ContactFormView(SuccessMessageMixin, FormView):
form_class = ContactForm
template_name = 'contact.html'
success_message = 'Thank you!'
success_url = reverse_lazy('home')
def form_valid(self, form):
form.send_email()
return super(ContactFormView, self).form_valid(form)
form_valid 被调用,但重定向到 sucess_url 没有发生并且没有错误。
感谢您的帮助。
-------------已更新------
forms.py
class ContactForm(forms.Form):
name = forms.CharField(widget = TextInput(attrs={'placeholder': 'Your Name'}))
email = forms.CharField(widget = EmailInput(attrs={'placeholder': 'Email'}))
phone = forms.CharField(widget = TextInput(attrs={'placeholder': 'Phone'}))
comment = forms.CharField(widget = forms.Textarea(attrs={'placeholder': 'Please write a comment'}))
def send_email(self):
# send email using the self.cleaned_data dictionary
print("email sent!")
urls.py
import web.views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^contact/', web.views.ContactFormView.as_view(), name='contact'),
url(r'^$', web.views.home, name='home')
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
contact.html
<div class="as-form">
<form method="post" class="myform" action="{% url 'contact' %}">
{% csrf_token %}
{% if form.errors %}{{ form.errors }}{% endif %}
<p> {{form.name}} </p>
<p> {{form.phone}} </p>
<p> {{form.email}} </p>
<p class="as-comment"> {{form.comment}} </p>
<hr>
<p class="as-submit"> <input type="submit" value="Submit" class="as-bgcolor"> </p>
</form>
</div>
【问题讨论】:
-
如果你硬编码
success_url而不是使用reverse_lazy,你会得到什么? -
请同时提供mixin类实现SuccessMessageMixin
-
我已经完成了硬编码的 success_url 并删除了 SuccessMessageMixin 并且没有任何变化。顺便说一句 SuccessMessageMixin 是一个来自 django.contrib.messages.views 的 django mixin import SuccessMessageMixin
-
你弄明白了吗?
-
不...不知道发生了什么。
标签: django django-class-based-views django-1.10