2012-08-16 74 views
5

我使用呈現在Flask-WFT documentation page上的render_field宏來呈現跨越不同模板的長表單中的字段。使用Flask-WTForms字段描述來呈現html標題屬性

甲字段被定義這樣

year_built = IntegerField(label='Year Built', 
      description='Year built, not the year of a major renovation.', 
      validators=[validators.NumberRange(
            min=1700, 
            max=2012, 
            message="Between %(min)s and %(max)s")]) 

宏看起來像這樣:

{% macro render_field(field) %} 
    <dt>{{ field.label }} 
    <dd>{{ field(**kwargs)|safe }} 
    {% if field.errors %} 
    <ul class=errors> 
    {% for error in field.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
    {% endif %} 
    </dd> 
{% endmacro %} 

在自己的個別字段是使用放置在形式...

{{ render_field(form.year_built, class="input text")}} 

我無法弄清楚的是在宏的部分內使用字段對象中的描述的方法在創建HTML字段field(**kwargs)。我知道我可以將關鍵字傳遞給render_field函數,但我正在處理具有超過100個字段的表單,並在forms.py中設置描述,然後將其重新設置爲template.html中的標題關鍵字,看起來像不必要的重新填充。我真的想用宏來顯示一個描述作爲標題,如果它存在的話,或者只顯示沒有標題的字段,如果沒有標題。

有沒有辦法在field()函數運行之前將新條目添加到kwargs

回答

8

所以這是比我想象的要容易得多......

{% macro render_field(field) %} 
    <dt>{{ field.label }} 
    <dd>{{ field(title=field.description, **kwargs)|safe }} 
    {% if field.errors %} 
    <ul class=errors> 
    {% for error in field.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
    {% endif %} 
    </dd> 
{% endmacro %} 
+0

哦,我......我不知道那場()內的模板比你forms.py場內類不同。換句話說,我可以添加一些屬性,如'dataforajax'(field(dataforajax ='test')),並將其放入html中。但是,我在添加'data-for-ajax'時遇到問題,我可能需要對屬性進行一些JavaScript編輯以放置破折號。 – Dexter 2014-11-12 18:47:21