Как добавить attrs в Widget во время рендеринга - PullRequest
2 голосов
/ 26 мая 2011

У меня есть следующая форма:

from django import forms    
class PostForm(forms.Form):
    message = forms.CharField(widget=forms.Textarea)

и следующая часть в моем шаблоне

<p>{{ form.message }}</p>

отображает поле как текстовое поле, как указано. Хотя для шаблона я хочу установить его в 4 строки и 25 столбцов, фактически не затрагивая определение формы. Это возможно?

Ответы [ 3 ]

5 голосов
/ 26 мая 2011
class PostForm(forms.Form):
     message = forms.CharField(widget=forms.Textarea)

    def set4x25(self):
        self.fields['message'].widget.attrs = {'rows':'4', 'cols': '25'}

И в шаблоне:

{{ form.set4x25 }}
{{ form.message }}

Вы можете настроить эту идею так, как вам нравится.

2 голосов
/ 22 марта 2012

Вы можете сделать это в шаблоне с помощью django-widget-tweaks :

{% load widget_tweaks %}
<p>{% render_field form.message rows="4" cols="25" %}</p>

или

{% load widget_tweaks %}
<p>{{ form.message|attr:"rows:4"|attr:"cols:25" }}</p>
0 голосов
/ 26 мая 2011

Вы не можете сделать это из шаблона, но вы можете:

  1. Используйте CSS, чтобы указать ширину и высоту текстовой области.Это заменит атрибуты строк и столбцов

  2. Визуализация поля вручную:

      {% with form.message as field %}
      <textarea name="{{ field.html_name }}"
                id="{{ field.html_initial_id }}"
                rows="4" cols="25">{% if field.data %}{{ field.data }}{% endif %}</textarea>
      {% endfor %}
    
...