Django экранирует виджет при рендеринге формы - PullRequest
2 голосов
/ 10 февраля 2011

Я создал собственный виджет и форму, которая его использует. Ранее у меня был простой шаблон для отображения формы при ее отладке:

<form>
    {{ run_form.as_p }}
</form>

Теперь я хочу заключить каждое поле формы в элемент div, поэтому я изменил шаблон на

{% for field in form %}
      <div class="fieldWrapper">
           {{ field.errors }}
           {{ field.label_tag }}: {{ field }}
      </div>
{% endfor %}

Но теперь кажется, что когда мое поле отображается, все его символы экранированы html, так что теперь, когда я смотрю на его исходный код, оно выглядит как &lt;input type=&quot;text&quot; id=&quot;id_scriptscrap&quot;/&gt там, где должно было <input type="text" id="id_scriptscrap"/>.

Есть что-то, что я пропускаю? Почему первый шаблон выводит его без экранирования, а второй - с экранированием? Возможно, я сделал что-то не так при создании пользовательского класса виджетов?

Ответы [ 2 ]

5 голосов
/ 10 февраля 2011

Возможно, я сделал что-то не так при создании пользовательского класса виджетов?

Возможно, хотя невозможно сказать, так как вы не публикуете код.

Причина, по которой работает form.as_p, заключается в том, что метод form._html_output(), который используют различные методы as_foo, вызывает на своем выходе mark_safe Однако каждый из встроенных классов виджетов также вызывает mark_safe на своем собственном выходе, поэтому они работают индивидуально. Вам, вероятно, просто нужно сделать то же самое с вашим пользовательским виджетом.

0 голосов
/ 08 мая 2017

Альтернативная причина: это также происходит, если вы случайно определили форму с виджетами вместо полей (например, password = forms.PasswordInput вместо password = forms.CharField(widget=forms.PasswordInput)

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