2011-02-10 2 views
2

Создал пользовательский виджет и форму, которая его использует. Раньше я просто был простой шаблон, чтобы показать форму, когда я отладки это:django escapes widget при визуализации формы

<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"/>.

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

ответ

5

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

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

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

+1

Спасибо, что это было просто прояснить для будущих читателей :) - виджет визуализирует () возвратил строку, которая не была отмечена mark_safe(), и, таким образом, шаблон ускользнул от нее. – olamundo

0

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

Смежные вопросы