2016-08-20 75 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}}'。 –