0

django / forms / forms.pyから:

def label_tag(self, contents=None, attrs=None):
    ..

def as_widget(self, widget=None, attrs=None, only_initial=False):
    ..

テンプレートから、次のようにlabel_tagを呼び出します。

{{ form.my_field.label_tag }}

ラベルを出力します。

それらの定義のように、それらのタグにどのように引数を提供する必要がありますか?たとえば、代替のラベルテキストとcssクラスを提供したいと思います。

私は次のようなことを試しました:

{{ form.my_field.label_tag contents='My alternative label' }}

しかし、それは私に与えます:

Could not parse the remainder: ' contents='My alternative label'' from 'form.code.label_tag contents='My alternative label''

同じことがattrsフィールドにも当てはまります。テンプレートからその値を指定できますか?cssクラスを提供したいと思います。cssクラスでは、現在フィルターを使用していますが、Djangoソースコードを調べているときに、label_tagとas_widgetにこれらの追加の引数があることに気付きました。そのため、テンプレートからそれらを提供できるのではないかと思います。

(AppEngineでDjango1.4を使用しています)

4

1 に答える 1

0

Djangoは、テンプレートの機能を非常に慎重に制限して、PHPの場合のようにWebサイト全体をテンプレートに記述しないようにします。

Django Book 2.0から:テンプレート:哲学と制限:

...Djangoテンプレート内でPythonコードを直接呼び出すことは不可能です。すべての「プログラミング」は、基本的にテンプレートタグが実行できる範囲に限定されます。

必要なことを実行するカスタムテンプレートタグまたはフィルターを作成することもでき ます...しかし、これはフォームロジックのように見えるため、他のことを行う方がほぼ確実に良いでしょう。

最も簡単なのは、フォームが定義されているラベル/ウィジェットを定義することです。すなわち:

from django import forms

class MyForm(forms.Form):
    my_field = forms.CharField(label='My label', widget=forms.Textarea)

とはいえ、ウィジェットについては、他にも文書化された方法があります。django-floppy-formsを使用すると、それらのレンダリングに使用されるテンプレート全体を簡単にオーバーライドできます。

最後に、django-crispyformsを強くお勧めします。テンプレートでフォームを手書きする手間がなくなるため、時間を大幅に節約できます。

于 2013-03-24T13:27:52.447 に答える