我在python / django上很新。 我喜欢django的模板,但有一个我经常找不到的东西
对于我来说,在(可能很长的)HTML标记上有一个条件属性是很常见的。大多数时候都是额外的CSS类。
例如,假设您有两个切换语言的链接,并且您希望一次只启用一个。我发现自己做了这样的事情:
{% get_language_info for LANGUAGE_CODE as l %}
<a href="/path/to/switch/to/spanish"
class="{% ifequal l.code "es" %} disable {% endifequal %}">
<img src="/spanish/flag/url" alt="Spanish">
</a>
<a href="/path/to/switch/to/english"
class="{% ifequal l.code "en" %} disable {% endifequal %}">
<img src="/english/flag/url" alt="English">
</a>
其他示例可能是在呈现项目列表和检查“已选择”项目等时
在其他语言中,我用三元运算符做了这个,但我知道在python / django世界中被认为是“邪恶的”: - )
我想知道是否有办法利用“yesno”过滤器。我试过做类似的事情:
{{l.code=="es"|yesno:"disabled,"}}
但我无法让它发挥作用......我错过了什么?
提前致谢。
答案 0 :(得分:2)
问题在于您发布的代码中的语法:
{{l.code=="es"|yesno:"disabled,"}}
它的处理方式如下:
{{ l.code=={{"es"|yesno:"disabled,"}} }}
(注意:该代码不起作用,它只是为了说明Django如何读取它)
您想要的是一个自定义模板代码,其工作方式与if
模板标签类似,但会像yesno
过滤器一样返回。你可以搜索像djangosnippets.com这样的东西;也许有人已经为你完成了这项工作。否则,我建议查看这两个的Django源代码,并尝试将它们合并到您自己的模板标签中。
答案 1 :(得分:0)
或者您可以使用jQuery / javascript来设置类: http://api.jquery.com/attr/ 这样的事情 - 未经测试!
{% get_language_info for LANGUAGE_CODE as l %}
<script>
{% if l.code='es' %}
$('.english').attr('class','disable');
{% else %}
$('.english').attr('class','disable');
{% endif %}
</script>
<a href="/path/to/switch/to/spanish"
id="spanish" class='enable">
<img src="/spanish/flag/url" alt="Spanish" >
</a>
<a href="/path/to/switch/to/english"
id="english" class='enable">
<img src="/english/flag/url" alt="English">
</a>