2016-04-02 3 views
0

私はdjangoのエラーメッセージを、フォーム入力ボックス自体の代わりにプレースホルダとしてフォームに表示したいと考えています。これはDjangoで可能ですか、それともJavascriptを書くことでこれを達成する必要がありますか?Djangoはテンプレートテンプレートをカスタムテンプレートに渡します

<div class="form-group"> 

     {% if login_form.password.errors %} 
      {% for error in login_form.password.errors %} 
       <p>{{ error }}</p> 
      {% endfor %} 
     {% endif %} 

     <div class="input-group"> 
      <span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span> 
      {{ login_form.password | placeholder:"password" | addClass:"form-control" }} 
     </div> 

    </div> 

特定の興味深い。 {{エラー}}私はそこに絶対必要を考えているフォーム

によってスローされたDjangoのエラーメッセージが表示され、この

{{ login_form.password | placeholder:{{ error }} | addClass:"form-control" }} 

{{ login_form.password | placeholder:"password" | addClass:"form-control" }} 

:私はこれを変更したいのですがテンプレート変数の文字列値を取得する何らかの方法ですが、回答が見つかりません

編集:私は役に立たないと以下を試しました

<div class="form-group"> 
    {% if login_form.password.errors %} 
     {% for error in login_form.password.errors %} 
      <div class="input-group"> 
       <span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span> 
       {{ login_form.password | placeholder:{{ error|escape }} | addClass:"form-control" }} 
      </div> 
     {% endfor %} 
    {% endif %} 
</div> 

@register.filter(name='placeholder') 
def placeholder(value, token): 
    value.field.widget.attrs["placeholder"] = token 
    return value 

Djangoはそれを訴えてTemplateSyntaxエラーをスローし、次のように私のカスタムtemplatetagが見えます:

プレースホルダは1がこれを行うことができる

答えて

1

まず、Djangoのテンプレートシステムでは、ネストされた表現が間違っている、placeholderのフィルタ引数は二重括弧で囲まれますが、直接書き込むべきではありませんので:

ここ
{{ login_form.password | placeholder:error | addClass:"form-control" }} 

error変数が正しくあり内括弧のスコープのコンテキストで評価されます。

第2に、フィルター引数の型を確認することをお勧めします。文字列値が必要な場合は、組み込みフィルタを使用して明示的な変換を行うことができます。

{% with err_msg=error|stringformat:"s" %} 
{{ login_form.password | placeholder:err_msg | addClass:"form-control" }} 
{% endwith %} 
1

を提供し、2つの引数を必要とします。

{{ login_form.password.errors }} 

ここではそのhttps://docs.djangoproject.com/en/1.9/topics/forms/#rendering-form-error-messages

コードの一部が

{{ login_form.password | placeholder:"password" | addClass:"form-control" }} 
{% if login_form.password.errors %} 
    <span class="error">{{ login_form.password.errors }}</span> 
{% endif %} 

すぎたり

{{ login_form.password | placeholder:"password" | addClass:"form-control" }} 
<input type="password" class="form-control" placeholder=" 
{% if login_form.password.errors %} 
    {{ login_form.password.errors }} 
{% else %} 
    password 
{% endif %} 
"> 
+0

'{{login_form.password |プレースホルダ:{{エラー|エスケープ}} | addClass: "form-control"}} 'エラーを返します –

+0

更新されたものを試してください。私はそれにハッキングされていない方法はないと思います。テンプレートタグを別のテンプレートの内部に置くと、django( '{{error | escape}}')の構文エラーとみなされます –

1

このような方法で行うことができるように書き直されるべきための関連文書です私はまだテストしていませんが、これはうまくいくかもしれません:

# forms.py 
class MyForm(forms.Form): 
    class meta: 
     model = MyModel 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     error_messages = self.fields['myfield'].error_messages 
     self.fields['myfield'].widget.attrs.update({'placeholder': error_messages})