2016-06-15 4 views
0

ModelFormの入力フィールドのクラス/属性を変更したいのですが、可能であればテンプレートからそれをやりたいのですが。以下はDjangoテンプレートをループする

このため私の解決策は、django-widget-tweaks

<form action="" method="POST" enctype="multipart/form-data"> 
    {% csrf_token %} 

    <div class="form-group"> 
     {{form.title|add_class:"form-control"|attr:"placeholder:Title"|attr:"type:text"}} 
    </div> 

    <div class="form-group"> 
     {{form.description|add_class:"form-control"|attr:"placeholder:Description"}} 
    </div> 

    <div class="form-group"> 
     {{form.author|add_class:"form-control"|attr:"placeholder:Author"}} 
    </div> 

    <div class="form-group"> 
     <input class="btn btn-primary" type="submit" value="Submit" /> 
    </div> 

</form> 

私の問題をジャンゴを使用して、これは非常に乾燥していないということですされており、これを行うには良い方法があります場合、私は思ったんだけど。私はdjangoがフォームをループしていることは知っていますが、属性を変更しながらそれをどのように統合できるかはわかりません。

何か助けていただければ幸いです。

答えて

2

プレースホルダを使用して、フィールドのhelp_text fieldの内部に格納することができます。そのような場を通じてその方法のうち、あなたがすることができます簡単にループして:あなたは%s'placeholder:%s'help_textを設定する必要がありますので、

{% for field in form %} 
<div class="form-group"> 
    {{ field|add_class:"form-control"|attr:field.help_text }} 
</div> 
{% endfor %} 

は、残念ながら、それは、第二引数のように、フィルタを使用することは不可能/難しいですあなたの希望する価値です。


通常のフォームを使用している場合は、コンストラクタにhelp_textと設定します。あなたはモデルのフォームを使用している場合でも、私はそれは、フィールドタイトルからあなたのための'placeholder:%s'文字列を作成することができ、新たなテンプレートタグを作成するのが最善だと思う:

@register.assignment_tag 
def get_placeholder_arg(field): 
    return 'placeholder:%s' % field.label 

次に、あなたのコードは次のようになります。

{% for field in form %} 
{% get_placeholder_arg field as arg %} 
<div class="form-group"> 
    {{ field|add_class:"form-control"|attr:arg }} 
</div> 
{% endfor %} 

詳細については、the django documentation on custom template tagsを参照してください。

+0

タイプフィールドはテストのためのもので、私はそれを必要としませんでした。そして解決策は本当に美しく見えます。私はヘルプテキストに文字列を渡す方法について興味がありますか?可能であればテンプレートからコントロールしたいので、テンプレートを見ればすべてのフロントエンドプロパティがクリアされます – Satchel

+0

答えを更新しました。 djangoでは、タグを使用せずにテンプレート内の変数を設定することはできません。お役に立てれば。 – Anonymous

+0

パーフェクト、これは私が探しているものです!ありがとう! – Satchel

関連する問題