Django - 如何将字典传递给模板标签

4

我已经创建了一个自定义的模板标签,用于按照在模板中指定的html属性呈现我的表单元素。我想要做的就是像这样将一个字典传递给我的标签:

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

有没有办法在模板上写出这样的东西?
2个回答

3
首先,你提供的是自定义过滤器的语法,而不是自定义标签。我会回答这个问题,并假设你想说的是自定义过滤器。
其次,你不能直接向过滤器(或模板标签)传递字典。花括号、方括号和圆括号都不允许在{% %}中出现,并且会在解析模板时导致语法错误。
然而,你可以通过传递一个看起来像字典的字符串,然后在模板标签中解析它来实现这一点:
{{ form.openid_identifier|htmlattributes:"{'class' : 'something', 'id': 'openid_identifier'}" }}

在这种情况下,您的自定义过滤器需要正确将其解析为字典。
了解您使用的解决方案可能会很有帮助。通常我会在表单类中设置表单对象的类(通常在forms.py中)。或者,如果您想对相关的标签有更精确的控制,只需直接拼写即可:
<input type="text" name="openid_identifier" id="openid_identifier" class="something" />

我刚刚看了你的非常相关的问题,所以我想这就回答了为什么你不想使用表单类的原因。在这种情况下,手动编写HTML代码是比使用过滤器更好、更清晰和更简洁的做法,这是我的观点。 - Jordan Reiter
将一个看起来像字典的字符串解析成字典对我来说确实是最简单的解决方案。 - Raphael

0
通过 takes_context = True 并从视图中传递所需的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接