首页 > 解决方案 > django widget_tweaks 可以将输入渲染为 textarea 框吗?

问题描述

我想在 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>标签。<textarea>有没有办法在不将模型从 CharField 更改为 TextField 的情况下将其渲染出来?我想要一个更大的盒子,这样就有更多的空间来写文字。我知道我可以添加一个可以更改输入框大小的类,但是 textarea 标签会更容易。

标签: djangodjango-modelsdjango-formsdjango-widget-tweaks

解决方案


您可以通过在 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'})
        }

请注意,虽然小部件可以添加类,但我认为在模板级别使用小部件调整而不是小部件添加 css 类或 id 更好。

  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',)


推荐阅读