【问题标题】:redirection to success_url is not working with django 1.10重定向到 success_url 不适用于 django 1.10
【发布时间】: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


【解决方案1】:

我不知道你是如何设置的,但下面的效果很好(Django 1.10,Python 3.5)

# urls.py

urlpatterns = [
    url(r'^$', home_view, name='home'),
    url(r'^form/$', ContactFormView.as_view(), name='contact')
]


# forms.py

class ContactForm(forms.Form):
    name = forms.CharField(max_length=20)

    def send_email(self):
        print('Email sent!')


# views.py
# Your ContactFormView as is


# contact.html

<form action="" method="post">{% csrf_token %}
    {% if form.errors %}{{ form.errors }}{% endif %}
    {{ form.as_p }}
</form>

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多