获取django模板中的字段类型

reg*_*gmi 13 django django-forms

我正在使用django表单,我想在我的HTML中使用Twitter Bootstrap的css.所以我的模板看起来像这样:

{% for field in form %}
    <div class="form-group">
        {{ field.label_tag }}<!--Same thing as : <label for="{{field.id_for_label}}"></label> -->

        <input type="{{field.type}}" class="form-control" id="{{field.auto_id}}" placeholder="Email">
      </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚是否获得了类型值.{{field.type}}.

有没有办法在django模板中获取输入字段的类型?

提前致谢

更新: 我问这个问题的原因是因为我希望能够将bootstrap类应用于input元素.但是在Bootstrap3中,要使用默认的css作为输入类型,你必须将form-control类添加到input元素,如下所示:<input type="text" class="form-control" id="{{field.auto_id}}" placeholder="">.

如果我使用django的字段,{{field}}那么我无法添加表单控件类.我希望这能澄清一些事情.

我也看到了这个应用程序https://github.com/dyve/django-bootstrap3看起来像我想做的事情.令我惊讶的是,django不允许访问表单类型以允许更大的灵活性.

Cha*_*ist 17

根据/sf/answers/2207698881/

您可以使用:

{{ [FIELD].field.widget.input_type }}
Run Code Online (Sandbox Code Playgroud)

[FIELD] 是你的字段名称.


Rah*_*pta 10

我认为你不必担心field_type.Django将根据表单字段为您自己处理.

让我们说有一个ContactForm像:

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)
Run Code Online (Sandbox Code Playgroud)

然后{{form.subject}}会自动<input>在模板中创建元素.

<input id="id_subject" type="text" name="subject" maxlength="100" />
Run Code Online (Sandbox Code Playgroud)

同样,{{form.message}}在模板中将创建:

<input type="text" name="message" id="id_message" />
Run Code Online (Sandbox Code Playgroud)

虽然如果您确实需要在模板中获取表单字段类型,您可以创建如下所示的自定义模板过滤器.

from django import template

register = template.Library()

@register.filter(name='field_type')
def field_type(field):
    return field.field.widget.__class__.__name__
Run Code Online (Sandbox Code Playgroud)

现在,在您的模板中,您需要执行以下操作:

{{form.field_name|field_type}}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,{{form.message|field_type}}将返回TextInput.


小智 3

如果您想访问字段类型,请参阅此答案
如果要覆盖字段的默认类型,请attrs在为字段定义小部件时使用参数。
例如。

field_name = forms.CharField(widget=forms.Textarea(attrs={'type': 'custom type'}))
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以传递任何键值对attrs,它们将在呈现表单时用作 html 标记中的属性。