2011-02-10 80 views
2

我创建了一个自定义模板标记,用于使用模板上指定的html属性呈现我的表单元素。我想要做的就是将字典传递给我的标签,如下所示:Django - 如何将字典传递给模板标记

{{ form.openid_identifier|htmlattributes:{'class' : 'something', 'id': 'openid_identifier'} }} 

有什么办法在模板上写这样的东西吗?

回答

3

首先,您给定义过滤器的语法,而不是自定义标记。假设你打算说自定义过滤器,我会回答这个问题。其次,你不能明确地将字典传递给过滤器(或者模板标签,就此而言)。括号,括号和括号不允许作为{% %}中的字符,并且在解析模板时将导致语法错误。

然而,有什么可阻止你,例如,传递,看起来像一本字典的字符串,然后在模板标签中对它进行分析:

{{ form.openid_identifier|htmlattributes:"{'class' : 'something', 'id': 'openid_identifier'}" }} 

在这种情况下,你的定制过滤器需要正确解析这个字典。

了解您为什么使用您正在使用的解决方案可能会有帮助。我通常在窗体类中设置Form对象的类(通常在forms.py)。或者,如果你想在对有关的标签更精确的控制,先走一步,拼出来:

<input type="text" name="openid_identifier" id="openid_identifier" class="something" /> 
+0

我只是看着你的[非常相关的问题](http://stackoverflow.com/questions/4951810/django-how-to-add-html-attributes-to-forms-on-templates),所以我想回答你为什么不对使用表单类感兴趣。在这种情况下,手动写出HTML在我看来,比使用过滤器更好,更清晰,更简洁。 – 2011-02-10 02:55:22

0

通过takes_context = True和你擦肩而过从视图所需要的数据。

相关问题