2016-09-17 7 views
1

forms.pyカスタムパラメータ

my_field = TextField(u"Enter a number", validators=[Required('This Field is Required')]) 

my_form.html

<table> 
    <tr> 
    <td colspan="4"> 
     {{form.my_field(placeholder= form.my_field.label.text, class_="form-control")}} 
     {% for error in form.my_field.errors %} 
      <span>{{error}}</span> 
     {% endfor %} 
    </td> 
    </tr> 
</table> 

これは単純なコードです。しかし、私はthisのように、それぞれのコードを記述するのではなく、ループ内のすべての入力フィールドをレンダリングする必要があります。ただし、各フィールドの値は、<td>に異なるcolspanという値になります。

<td>で使用できるcolspanのカスタムパラメータを追加するにはどうすればよいですか?

ような何か:(コード上からわずかdiff

forms.py

my_field = TextField(colspan="4") 

my_form.html

<td colspan={{form.my_field.colspan}}> 

答えて

1

余分なcolspan属性を持つcustom fieldを作成する必要があります。

まずTextFieldをクラス分けカスタムフィールドのサブを定義します。

class MyCustomTextField(TextField): 
    def __init__(self, colspan=4, *args, **kwargs): 
     super(MyCustomTextField, self).__init__(*args, **kwargs) 
     self.colspan = colspan 

は、今すぐあなたのフォームにカスタムフィールドを使用します。

class MyForm(Form): 
    my_field = MyCustomTextField(4, u"Enter a number", validators=[Required('This Field is Required')]) 

MyCustomTextFieldのためにその最初のパラメータ(この場合は4)を参照してください?それがあなたのcolspan属性です。最後に

は、そのようなあなたのテンプレートで属性にアクセス:

<td colspan="{{form.my_field.colspan}}"> 
+0

このカスタムクラスは、私はいつも忘れては良いアイデアです。しかし、この場合、すべてのフィールドに共通のカスタムクラスを作成する必要があります。私の場合のように 'TextField'だけでなく、20種類以上のフォームフィールドを用意しています。そんなことを作ることは可能でしょうか? – RatDon

+1

これは厳しいものです。私は親クラスの 'Field'クラスをサブクラス化しようとしていて、次にこの他の答えからいくつかのアイデアをつかむ他のフィールドの親クラスを変更しようとしていました:http://stackoverflow.com/a/9541560/3632543 しかし、私はそれで成功していなかった、プラスそれは本当に良いアイデアではないと言われています。最も簡単な(私は理解しているが、ちょっと不器用だが)これを行う方法は、あなた自身が必要とする各フィールドをサブクラス化して独自のフィールドセットを定義することだろう。私は書き込むコードがかなりあることを知っていますが、一度の仕事でなければなりません。 – AArias

+0

うん。それは一度だけの仕事であり、将来の使用にもそれを使用することができます。ありがとう。 – RatDon

関連する問題