jinja2表单渲染不允许包含“ - ”的属性

时间:2013-01-22 02:52:17

标签: google-app-engine django-forms jinja2

我正在尝试根据this tutorial自定义表单模板。据我了解,render()只是为标记添加了一些属性。例如,我添加placeholder = "abc"并且效果很好。

{% call inserttourbus(id = "formAddNewRow" )  %}

     <div class="fieldWrapper">
         {% if inserttourbus['bustype'].label() %}Bus Type{% endif %}
         {{ inserttourbus['bustype'].render(placeholder="abc")|safe }}
         {% if inserttourbus['bustype'].errors() %}Not filled yet!{% endif %}      
     </div>
{% endcall %}

这是我的问题: - 我使用bootstrap typeahead作为我的模板,因此我需要将以下属性添加到inserttourbus文本框

data-provide="typeahead" data-items="4" data-source='["Alabama","Alaska"]'

所以它会变成

{{ inserttourbus['bustype'].render(placeholder="abc", data-provide="typeahead", data-items="4", data-source='["Alabama","Alaska"]')|safe }}

但jinja2引擎似乎不接受data-providedata-items,依此类推,因为它包含"-"个字符。如果我将data-provide更改为dataprovide,则jinja2引擎可以很好地呈现代码。

但是,在bootstrap typeahead javascript中,所有变量都定义为data-providedata-items。如果我将它们更改为dataprovidedataitems,则javascipt将停止工作。

请给我一个解决方案: - 如何使jinja2接受具有“ - ”的属性 - 其他解决方案,建议

2 个答案:

答案 0 :(得分:9)

在Flask中查看this snippet这样做。我想它对于Django来说会有同样的效果;在ad-hoc字典中使用无效的Jinja2(Python)语法传递HTML属性:

{{ inserttourbus['bustype'].render(placeholder="abc", 
       **{'data-provide':'typeahead',
          'data-items':'4',
          'data-source':'["Alabama","Alaska"]'}) }}

答案 1 :(得分:1)

连字符用作Python中的减法运算符。所以不要在名字中使用它。你可以在字符串中使用它。