Получить вид виджета формы Django из шаблона



Answers

Возможно ли создать шаблонный тег? Что-то вроде field.field.widget|widget_type

Редактировать с Оли: Хороший момент! Я просто написал фильтр:

from django import template
register = template.Library()

@register.filter('klass')
def klass(ob):
    return ob.__class__.__name__

И теперь {{ object|klass }} корректно отображается. Теперь мне нужно выяснить, как использовать это внутри оператора if .

Edit from Oli # 2: Мне нужно было использовать результат этого в шаблоне if statetement in-template, поэтому я просто переместил всю эту логику в templatetag. Магия. Спасибо, что тыкаешь меня в правильном направлении.

Question

Я повторяю поля формы и для определенных полей хочу немного другую компоновку, требующую изменения HTML.

Чтобы сделать это точно, мне просто нужно знать тип виджета. Его название класса или что-то подобное. В стандартном питоне это легко! field.field.widget.__class__.__name__

К сожалению, вам не разрешен доступ к символам подчеркивания в шаблонах. Большой!

Вы можете проверить field.field.widget.input_type но это работает только для типов text / password <input ../> . Мне нужно больше разрешения.

Для меня, как бы сложно это ни выглядело, имеет смысл сделать это на уровне шаблона. Я передал часть кода, обрабатывающего HTML для полей, в отдельный шаблон, который включается в цикл цикла. Это означает, что он согласован между ModelForm и стандартной Form s (что-то, что не было бы правдой, если бы я написал промежуточный класс Form).

Если вы видите универсальный подход, который не требует от меня редактирования 20-тичных форм, дайте мне знать!




После ответа от Oli и rinti: я использовал этот, и я думаю, что это немного проще:

код шаблона: {{ field|fieldtype }}

код фильтра:

from django import template
register = template.Library()

@register.filter('fieldtype')
def fieldtype(field):
    return field.field.widget.__class__.__name__





Links