【发布时间】:2014-09-19 06:28:29
【问题描述】:
我正在尝试在任意页面上呈现 Django 联系表单。我正在使用请求上下文处理器和模板包含来执行此操作。这使我可以在任何我想要的地方很好地显示表单。然后我有一个接受 POST 请求的特殊 URL(在 GET 上,我只是重定向它们)。如果表单有效,我会发送一封电子邮件,然后重定向到成功页面。在表单无效时,我知道要传递带有错误绑定的表单,但是...我不知道要指定哪个模板,因为表单是一个包含并且父模板可以在任何地方。
在 Django 视图中获取内容的唯一方法是从请求中获取。我可以得到路径,并且做更多的工作,可能是 POST 来自的原始视图,但这并没有让我得到模板。
# urls.py
url(r'^services/$', 'website.views.services', name='services'),
url(r'^services/contact/$', 'website.views.services_contact', name='services_contact'),
url(r'^services/contact/done/$', 'website.views.services_contact_done', name='services_contact_done')
# views.py
class ServicesView(TemplateView):
template_name = 'services/services.html'
services = ServicesView.as_view()
class ServicesContactView(View):
def get(self, request, *args, **kwargs):
return redirect('services')
def post(self, request, *args, **kwargs):
form = ContactForm(request.POST)
if form.is_valid():
form.send_email()
return redirect('services_contact_done')
else:
return render(request, ????, {'contact_form': form})
services_contact = ServicesContactView.as_view()
# contact.html
<h2>Contact me</h2>
<p>Enter your email to receive your questionnaire</p>
<form action="{% url 'services_contact' %}" method="post">
{% csrf_token %}
{% if contact_form.non_field_errors %}
{{ contact_form.non_field_errors }}
{% endif %}
{{ contact_form.as_p }}
<button type="submit" name="submit">Send questionnaire</button>
</form>
# home.html
{% extends "base.html" %}
{% block content %}
<h1>{{ site.name }}</h1>
{% include "services/contact.html" %}
{% endblock %}
典型的 Django 表单视图在表单无效时有些沉默,因为它的场景大多类似于未绑定的表单,所以最后都只是渲染。由于模板包含,我的情况有所不同。
【问题讨论】:
-
你能粘贴你的模板吗?
-
将我的模板添加到原始问题中。
标签: django django-forms django-class-based-views