2016-08-20 55 views
0

我正在尝试为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 }})来实现?

回答

1

您可以在表单定义中实现一个PasswordInput小部件,该小部件将呈现为类型为“password”的密码字段。

class ExampleForm(forms.Form): 
    password = forms.CharField(label='Password', 
           widget=forms.PasswordInput()) 

在模板,

{{form.password}} 

会使这个领域,这是最干净的解决方案。

您也可以访问该字段的类型(如你想要的),像这样:

{{form.fields.password.widget.input_type}} 

需要注意的是,如果你想进一步定制超出了简单的呈现形式,没有什么错只是写您自己的字段的HTML。

+0

感谢您的帮助!我需要稍微修改它以在for循环中工作:'{{field.field.widget.input_type}}'。 –