在Django的登录模板中获取字段类型
问题描述:
我正在尝试为Django的内置登录视图创建自定义模板。在它看起来像(registration/login.html
)的那一刻:在Django的登录模板中获取字段类型
<form method="post">
{% csrf_token %}
{% for field in form %}
{% include 'registration/form_field.html' %}
{% endfor %}
<input class="btn btn-primary btn-block" type="submit" value="{% trans "Log in" %}">
</form>
而且registration/form_field.html
文件是:
<div class="form-group {% if field.errors %}has-error{% endif %}">
<input class="form-control" name="{{ field.name }}" placeholder="{{ field.label }}" {% if field.data %}value="{{ field.data }}"{% endif %} />
{% if field.errors %}
<span class='text-danger'>{{ field.errors|join:'<br>' }}</span>
{% endif %}
</div>
一切正常,唯一的问题是,密码以明文形式显示。
为了解决这个问题,type="password"
应该设置为password
字段(并且type="text"
为username
字段)。
是否可以使用field
变量(即类似于{{ field.type }}
)来实现?
答
您可以在表单定义中实现一个PasswordInput小部件,该小部件将呈现为类型为“password”的密码字段。
class ExampleForm(forms.Form):
password = forms.CharField(label='Password',
widget=forms.PasswordInput())
在模板,
{{form.password}}
会使这个领域,这是最干净的解决方案。
您也可以访问该字段的类型(如你想要的),像这样:
{{form.fields.password.widget.input_type}}
需要注意的是,如果你想进一步定制超出了简单的呈现形式,没有什么错只是写您自己的字段的HTML。
感谢您的帮助!我需要稍微修改它以在for循环中工作:'{{field.field.widget.input_type}}'。 –