Добавление атрибутов для формирования меток в Django 1.5

У меня есть код, который выглядит так:

  #form.html
  <form action="/form-action" method="post">
    {{form.faction.label_tag}}
    {{form.faction}}<br />
    {{form.character_name.label_tag}}
    {{form.character_name}}
  </form>

  #form.py
  class CharacterForm(forms.Form):
    FACTION_CHOICES = (
      ('Sith', 'Sith Empire'),
      ('Republic', 'Republic Alliance')
    )
    faction = forms.ChoiceField(choices=FACTION_CHOICES)
    character_name = forms.CharField(max_length=100)

Однако я хотел бы иметь указанный класс в теге метки на выходе html. Я знаю, что мог бы сделать:

  <form action="/form-action" method="post">
    <label for="id_faction" class="foo">{{form.faction.label}}:</label>
    {{form.faction}}<br />
    <label for="id_character_name" class="bar">{{form.character_name.label}}:</label>
    {{form.character_name}}
  </form>

Раньше я использовал Rails, и вы можете сделать что-то вроде:

<%= f.label :field, class: "baz"  %>

и надеялся, что в django было такое же простое решение. Я думал, что использование form.field-name.label_tag(attrs={'class':'custom-class-name'}) сработает, но, увы, я застрял. Любое понимание ценится.


person Erik    schedule 08.10.2014    source источник
comment
Взгляните на: stackoverflow.com/questions/6959178/ для некоторых идей.   -  person Brandon    schedule 08.10.2014
comment
возможно, это поможет: stackoverflow. ком/вопросы/414679/   -  person Sasa    schedule 08.10.2014
comment
С другой стороны, попробуйте перенести свое приложение на более новую версию Django, если это возможно, поскольку версия 1.5 теперь считается небезопасной.   -  person cms_mgr    schedule 08.10.2014
comment
Можно добавить класс к фактическому вводу через: 'character_name = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'class': 'foo'}))' Но ничего подобного для меток.   -  person Erik    schedule 08.10.2014


Ответы (1)


Для этого я всегда использую widget_tweaks

  1. Установите его: pip install django-widget-tweaks.
  2. Добавьте «widget_tweaks» в INSTALLED_APPS в settings.py после приложений django и непосредственно перед вашими приложениями.
  3. Добавьте {% load widget_tweaks %} в начало шаблона, который вы будете настраивать.

Теперь, чтобы добавить класс для поля "name" формы form1, выполните следующие действия:

{{ form1.name|add_class:"baz" }}

или добавить 2 и более

{{ form1.name|add_class:"baz baz2 baz3" }}

который добавит class ="baz baz2 baz3" в вывод HTML вашего поля

Вы также можете добавить атрибуты:

{{ form1.name|attr:"size:200"|attr:"color:blue"}}

и объедините два ^^

{{ form1.name|add_class:"baz baz2 baz3"|attr:"size:200"|attr:"color:blue"}}

Вы также можете протестировать тип поля для адаптированного вывода, включив фрагменты в соответствии с типом. это то, что я делаю. Обратитесь к документам widget_tweaks, у меня это работает на Django 1.6 и 1.7. Надеюсь, это поможет вам.

person Cherif KAOUA    schedule 08.10.2014
comment
Мне придется взглянуть на это, но, надеюсь, появится решение, отличное от стороннего. - person Erik; 08.10.2014