我想为InstellingInfo表单生成自定义错误消息,但无论我做什么,我都会不断获得浏览器的标准错误消息。应显示的错误消息可以在choicefield_errors和charfield_errors中看到。我错过了什么,因为我觉得它应该工作
我希望错误消息以红色显示在相关输入字段上方,标签旁边
在这一页的底部,我放了几张它现在的样子的照片
views.py:
def instellingenDatabase(request):
if request.method == "POST":
form = InstellingenForm(request.POST)
if form.is_valid():
request.session['data'] = request.POST
spelmodus = request.POST.get('spelmodus')
if spelmodus == 'woorden':
return redirect('speelscherm-woorden')
else:
return redirect('speelscherm-tijd')
else:
form = InstellingenForm()
return render(request, 'instellingenDatabase.html', {'formulier': form})
forms.py:
from django import forms
SPELMODUS = [
('', ''),
('tijd', 'Tijd'),
('woorden', 'Woorden'),
]
TIJD = [
('', ''),
('60', '1 minuut'),
('120', '2 minuten'),
('300', '5 minuten'),
]
WOORDEN = [
('', ''),
('50', '50 woorden'),
('100', '100 woorden'),
('150', '150 woorden'),
]
TALEN = [
('', ''),
('nederlands', 'Nederlands'),
('engels', 'Engels'),
]
MOEILIJKHEID = [
('', ''),
('makkelijk', 'Makkelijk'),
('gemiddeld', 'Gemiddeld'),
('moeilijk', 'Moeilijk'),
]
charfield_errors = {
'required': 'Dit veld is verplicht en mag alleen letters bevatten',
'invalid': 'Dit veld is verplicht'
}
choicefield_errors = {
'required': 'Dit veld is verplicht',
'invalid': 'Dit veld is verplicht'
}
class InstellingenForm(forms.Form):
naam = forms.CharField(label="Naam",
max_length=10,
required=True,
error_messages=charfield_errors,
widget=forms.TextInput(
attrs={'class': 'input-container'}))
spelmodus = forms.ChoiceField(label="Spelmodus",
choices=SPELMODUS,
required=True,
error_messages=choicefield_errors,
widget=forms.Select(
attrs={'class': 'input-container', 'id': 'spelmodus', 'onchange': 'hideShow(this.value)', }))
tijd = forms.ChoiceField(label="",
choices=TIJD,
required=False,
error_messages=choicefield_errors,
widget=forms.Select(
attrs={'class': 'input-container', 'id': 'tijdClass'}))
woorden = forms.ChoiceField(label="",
choices=WOORDEN,
required=False,
error_messages=choicefield_errors,
widget=forms.Select(
attrs={'class': 'input-container', 'id': 'woordenClass'}))
taal = forms.ChoiceField(label="Taal",
choices=TALEN,
required=True,
error_messages=choicefield_errors,
widget=forms.Select(
attrs={'class': 'input-container'}))
moeilijkheid = forms.ChoiceField(label="Moeilijkheid",
choices=MOEILIJKHEID,
required=True,
error_messages=choicefield_errors,
widget=forms.Select(
attrs={'class': 'input-container'}))
instellingendabase.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'instellingen.css' %}">
<script type='text/javascript' src="{% static 'instellingen.js' %}"></script>
</head>
<body>
{% include "header.html" %}
<div class="bodypage">
<div class="settings-container">
<div class="playText">
Play
</div>
<form method="POST" action="">
{% csrf_token %}
<label>Naam</label>
{{formulier.naam}}
<label>Spelmodus</label>
{{formulier.spelmodus}}
<label id='tijdlabel' style="display: none;">Tijd</label>
{{formulier.tijd}}
<label id='woordenlabel' style="display: none;">Woorden</label>
{{formulier.woorden}}
<label>Taal</label>
{{formulier.taal}}
<label>Moeilijkheid</label>
{{formulier.moeilijkheid}}
<input type="submit" name="Start" value="Start" class="button">
</form>
</div>
</div>
</body>
</html>
您可以将
novalidate
设置为窗体并跳过默认浏览器验证。如果您希望在发送表单之前在浏览器中进行自定义验证,则必须使用JS实现您可以也应该使用后端(在服务器上的Django中)验证,然后可以显示如下错误:
有关如何显示后端验证错误的详细信息,请参见https://docs.djangoproject.com/en/3.2/topics/forms/#rendering-fields-manually
相关问题 更多 >
编程相关推荐