我在製作聯繫表格。當我讓Django在我的模板中使用{{ form.as_p }}
解壓表單的字段時,它呈現得很好,但是如果我不想手動呈現字段,那麼我遇到了問題。如何爲表單中的未填充字段添加錯誤消息?
我想要的是添加一個錯誤消息,如果一個字段未實現。
這是我使用Django文檔https://docs.djangoproject.com/en/1.8/topics/forms/
<form role="form" method="post">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="fieldWrapper">
{{ form.contact_name.errors }}
<label for="{{ form.contact_name.id_for_label }}">Name:</label>
{{ form.contact_name }}
</div>
<div class="fieldWrapper">
{{ form.content.errors }}
<label for="{{ form.content.id_for_label }}">Message:</label>
{{ form.content }}
</div>
<div class="fieldWrapper">
{{ form.contact_email.errors }}
<label for="{{ form.contact_email.id_for_label }}">Email:</label>
{{ form.contact_email }}
</div>
<input type="submit" value="Submit" />
</form>
做,但如果某些字段沒有兌現我沒有得到錯誤信息。 ,我會在我的view.py定義一個空的形式下else form = form_class()
這是我現在使用的代碼:
views.py
def contact(request):
form_class = ContactForm
if request.method == 'POST':
form = form_class(data=request.POST)
if form.is_valid():
contact_name = request.POST.get('contact_name', '')
contact_email = request.POST.get('contact_email', '')
form_content = request.POST.get('content', '')
template = get_template('agency/contact_template.txt')
context = Context({
'contact_name': contact_name,
'contact_email': contact_email,
'form_content': form_content,
})
content = template.render(context)
email = EmailMessage(
"New messages",
content,
"My web site " + '<[email protected]>',
['[email protected]'],
headers = {'Message respond to': contact_email}
)
email.send()
return render_to_response('papers/thank_you.html', {}, context_instance=RequestContext(request))
else:
form = form_class()
return render_to_response('papers/contact.html', {'form': form_class}, context_instance=RequestContext(request))
contact.html
<form role="form" id="contact-form" action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<p class="contact-submit">
<button id="contact-submit" class="submit" type="submit" value="Submit">Send</button>
</p>
</form>
forms.py
from django import forms
class ContactForm(forms.Form):
contact_name = forms.CharField(required=True)
contact_email = forms.EmailField(required=True,)
content = forms.CharField(
required=True,
widget=forms.Textarea)
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.fields['contact_name'].label = "Name:"
self.fields['contact_email'].label = "Email:"
self.fields['content'].label = "Message"
你可以在你的表單中寫一個乾淨的方法,看看這個https://docs.djangoproject.com/en/1.8/ref/forms/validation/#cleaning-a-specific-field-attribute –
As另外,你可以通過使用'render'而不是'render_to_response'來簡化你的代碼,例如'return render(request,'papers/contact.html',{'form':form_class})''。 – Alasdair