【问题标题】:How to add attrs to Widget at rendertime如何在渲染时将属性添加到小部件
【发布时间】:2011-09-02 13:27:39
【问题描述】:

我有以下表格:

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

以及我模板中的以下部分

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

它将字段呈现为指定的文本区域。虽然对于模板,我想将其设置为 4 行和 25 列,而无需实际接触表单定义。这可能吗?

【问题讨论】:

    标签: django django-templates django-forms


    【解决方案1】:
    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 }}
    

    您可以根据需要自定义此想法。

    【讨论】:

    • 这太简单了 :D :D 谢谢
    • 这确实触及了表单定义,不是吗?
    • @Andrey Fedoseev 我认为 Jokey 的意思是声明表单字段。
    【解决方案2】:

    您可以在模板中使用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>
    

    【讨论】:

      【解决方案3】:

      您无法从模板中执行此操作,但您可以:

      1. 使用 CSS 指定文本区域的宽度和高度。这将覆盖 rows 和 cols 属性

      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 %}
        

      【讨论】:

        猜你喜欢
        • 2020-05-19
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-20
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多