yesno过滤器的复杂比较?

时间:2011-12-06 18:20:46

标签: python django templates

我在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,"}}

但我无法让它发挥作用......我错过了什么?

提前致谢。

2 个答案:

答案 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>