【发布时间】:2013-04-02 04:10:53
【问题描述】:
我正在尝试使用 django 模板 for 循环生成导航表。 href 目标包含一个 django 变量。 django模板是jade格式写的。
如果我在 django 模板中使用 HTML 格式,我会使用:
<a href="#{{group.name}}"> {{group.name}} </a>
但我找不到使用翡翠格式的正确语法。
我拥有的是:
table.generic
tbody
tr
th Jump to a Group
{% for group in groups %}
tr
td
a(href!='#{{group.name}}') {{group.name}}
{% endfor %}
但是锚点在 HTML 中呈现为:
<a +{group.name.__str__()+'}'="" href="">Registration</a>
“注册”是 group.name 的值。
删除 ! 会导致 django 渲染错误。
我尝试插入一个反斜杠:a(href!='#\{{group.name}}') {{group.name}},但这会将反斜杠完整呈现为:
<a href="#\Registration">Registration</a>
建议?
编辑:作为一个糟糕的解决方法,我添加了一个“磅”方法来返回带有 # 前缀的组名:
def pound(self):
return unicode("#" + self.name)
现在我可以在翡翠模板中引用{{group.pound}}了:
a(href!='{{group.pound}}') {{group.name}}
也许更好的方法名称是 group.name_as_id_tag ....
已解决:将 django 模板变量格式化为玉变量
根据@user1737909 的最后建议,我将建议扩展为尝试:
a(href='##{group.name}') {{group.name}}
关键是将django双卷曲变量{{}}格式化为磅单卷曲玉变量#{}。不要在= 符号之前包含!,因此变量是由jade评估的,它将插入它从django获得的值。
我希望我能找到一个指向编码风格参考页面的链接以包含在此处。但如果我有的话,我一开始就不会问这个问题。
【问题讨论】:
-
您使用 django 渲染到玉模板的任何特殊原因?
-
撇开当前的语法问题不谈,我发现格式更快、更清晰,不必关注
<、>和结束标签。 -
你试过pyjade吗?
-
对于
#的问题,jade认为是interp,你可以试试'#'+'{{foo}}'(或者#\{{abc}) -
@user1737909:我正在使用 pyjade-1.6-py2.7。此外,似乎插入
+或反斜杠或任何字符会产生#+Registration或#\Registration或#charRegistration。