Я создаю очень простую форму в Django и хочу отображать ошибки формы в теге предупреждения Bootstrap.Я знаю, как это сделать (например, Django docs или Django Forms: если недействительно, показать форму с сообщением об ошибке или Как отобразить ошибки формы Django не в UL?).Однако, когда я это делаю, я вижу, что ошибки появляются дважды.Кажется, что элемент Django {{ form }}
в шаблоне отображает ошибки в теге ul
по умолчанию, в дополнение к моим ошибкам в пользовательском формате.
Каков наилучший способ избежать этого дублирования?
В template.html
:
<!--Load the file search form from the view-->
<form action="" method="post" id="homepage_filesearch">
<!--Show any errors from a previous form submission-->
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% endif %}
{{ csrf_input }}
{{ form }}
<button class="btn btn-primary" type="submit">Search</span></button>
</form>
В views.py
:
from .forms import FileSearchForm
def view(request):
# Create a form instance and populate it with data from the request
form = FileSearchForm(request.POST or None)
# If this is a POST request, we need to process the form data
if request.method == 'POST':
if form.is_valid():
return form.redirect_to_files()
template = 'template.html'
context = {'form': form}
return render(request, template, context)
В forms.py
:
class FileSearchForm(forms.Form):
# Define search field
search = forms.CharField(label='', max_length=500, required=True,
empty_value='Search')
def clean_search(self):
# Get the cleaned search data
search = self.cleaned_data['search']
# Make sure the search is either a proposal or fileroot
if some_error_case:
raise forms.ValidationError('Invalid search term {}. Please provide proposal number or file root.'.format(search))
Результат после неверного поиска: