Форма Django отображается с недопустимым синтаксисом HTML - PullRequest
0 голосов
/ 13 июля 2020

У меня есть проект Django, в котором я использую интегрированные формы. Но он отправляет моему клиенту неправильный синтаксис HTML. Это не должно иметь большого значения, поскольку в наши дни браузеры очищают такие ошибки. Но когда форма отправляется обратно на сервер, форма не может быть проверена, потому что firefox отправляет обратно очищенную версию.

У меня есть форма с множественным выбором:

class ProjectForm(forms.Form):

    # [...]
    project_leaders = forms.ModelChoiceField(widget=forms.SelectMultiple, queryset=User.objects.all(), initial=0)

Эта форма интегрирована в соответствующий файл html:

{{ project_form.as_p | linebreaks }}

Это исходный код от него (через Firefox Page Source):

<p>[...] <select name="project_leaders" required id="id_project_leaders" multiple><br>
<option value="test">test</option></p>
<p></select></p>

Firefox очищает его от c, но он должен быть отправлен и принят django. Кто-нибудь знает, как я могу django это сделать?

1 Ответ

1 голос
/ 13 июля 2020

Это не должно иметь большого значения, поскольку браузеры в настоящее время очищают такие ошибки.

Браузер изо всех сил пытается извлечь какой-то смысл из ошибочной разметки, но результат не всегда то, чего ожидал автор. Чтобы получить именно ту структуру, которую хотите, указанный автор должен написать правильно HTML. Это не изменилось с 90-х годов.

В этом конкретном случае c я предлагаю избавиться от фильтра | linebreaks . Он предназначен для обычного текста с простейшими тегами форматирования.

Фильтр добавляет <br> после открывающего тега <select>. Это приводит к тому, что браузер снова автоматически закрывает <select>, поскольку <br> s недействительны внутри <select> s. Затем элементы <option> помещаются за пределы <select>, не оказывая никакого влияния. Закрытие и повторное открытие тегов <p> является признаком того, что браузер не полностью знает, что делать с последним случайным тегом </select>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...