2016-08-20 4 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> 

すべてが期待通りに、唯一の問題は、パスワードがクリアテキストで表示されていることである動作します。

これを解決するにはpasswordフィールド(およびusernameフィールドの場合はtype="text")に設定する必要があります。

field変数(つまり、{{ field.type }}など)を使用して実装できますか?

答えて

1

フォーム定義にPasswordInputウィジェットを実装すると、type = "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}}'。 –

関連する問題