渲染表单没有标签django

时间:2015-07-12 01:58:29

标签: django django-forms django-templates

{% for fields in form %}
   {{ field.label }}
   {{ field }}
{% endfor %}

{{ field }}将呈现类似于:

的内容

<input type="text" id="something_id" .../>

有没有办法让我可以渲染一个字段,而不必将其包装在标签中?因此,例如,我渲染一个字段,我得到(没有输入标记):

type='text' id='_something_id'

在这种情况下,我可以继续手动添加自定义类,以及我想要的时间和地点:

<input {{ field }} class='class class-again' required autocomplete='off' />

我有没有办法在Django中做到这一点,渲染一个没有它包裹在元素中的字段?

显然,如果对大量的字段进行处理使这种方法变得不切实际,那么这种难以格式化的方法可能会很累人。就我而言,我只是想要将一些css定制到两个字段,并且必须通过Django Forms或模板标签等,我觉得这个过程很漫长

2 个答案:

答案 0 :(得分:1)

如果您知道输入类型,则可以执行此操作:

{% for field in form %}
    {{ field.label_tag }}
    <input type="text" id="{{ field.id_for_label }}" name="{{ field.html_name }}" value="{{ field.value }}"/>
{% endfor %}

如果您有不同的输入类型,您仍然可以手动浏览字段而不是迭代它们(使用它们的名称,例如。form.username)。

但是在大​​多数情况下,最好使用widget API在后端执行这些操作:

name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'}))

答案 1 :(得分:0)

有可能。您可以编写自己的HTML代码,您知道Django会为idname属性指定一种格式,例如:id='something_id'name属性是重要的属性,你应该确保它与Django分配的属性相同。

另一种选择是:

# I will assume you have a field named something
something = forms.CharField(widget=forms.TextInput(attrs={'class':'class class-again''}))

这应该做你需要的。我希望这会有所帮助。