django widget_tweaks 可以将输入渲染为文本框吗?

Can django widget_tweaks render out input as textarea box?

我想在 Django 中使用 widget_tweaks 将输入框呈现为文本区域。

这是我的代码:

                <div class="form-row">
                <div class="form-group col-md-6">
                    <label>More information *</label>
                    {% render_field form.info class="form-control" %}
                </div>                
            </div>

一切正常,但呈现为 <input> 标记。有什么方法可以在不将模型从 CharField 更改为 TextField 的情况下将其呈现为 <textarea> 吗?我想要一个更大的盒子,这样就有更多 space 来写文字。我知道我可以添加一个 class 来改变输入框的大小,但是 textarea 标签会更容易。

您可以通过在 forms.py 中指定小部件将 CharField 呈现为文本区域。

text = forms.CharField(widget=forms.Textarea)

或者设置textarea的默认宽度和高度

text = forms.CharField(widget=forms.Textarea(attrs={"rows":3, "cols":10}))

有两种方法可以将其合并到您的 forms.py。

  1. 首选方式,尤其是当您想将小部件添加到多个字段时。
class MyModelForm(forms.ModelForm):

    class Meta:
        model = MyModel
        fields= ('text', 'field2')
        widgets = {
            'text': forms.Textarea(attrs={"rows":3, "cols":10})),
            'field2': forms.RadioSelect(attrs= {
                 'class': 'choice_class'})
        }

请注意,虽然 widget 可以添加 class,但我认为最好在模板级别使用 widget-tweaks 添加 css class 或 id 而不是 widget。

  1. forms.py 中的另一种方式。当您想将小部件添加到一个或两个字段时,这种方式很有效。
class MyModelForm(forms.ModelForm):
    text = forms.CharField(widget=forms.Textarea(attrs={"rows":3, "cols":10})

    class Meta:
         model = MyModel
         fields = ('text', 'field2',)