2011-12-06 66 views
3

我很新的python/django。 我爱django的模板,但有一个经常性的东西,我找不到yesno过滤器上的复杂比较?

我很常见我有一个条件属性(可能很长)的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> 

其他的例子可能是在渲染的项目清单,并检查了“选择”一个等

在我与三元运营商这样做是其他语言,但我知道这是蟒蛇/ Django世界上的“邪恶”:-)

我不知道是否有一种方法来利用“yesno”过滤器。我试图做类似的事情:

{{l.code=="es"|yesno:"disabled,"}} 

但我无法得到它的工作......我错过了什么吗?

在此先感谢。

回答

2

的问题是简单地在您发布的代码的语法:

{{l.code=="es"|yesno:"disabled,"}} 

它实际上处理,如:

{{ l.code=={{"es"|yesno:"disabled,"}} }} 

(注:该代码不起作用,它只是意味着说明Django如何读取它)

你想要的是一个自定义模板标签,其工作方式与if模板标签相似,但返回像yesno过滤器河你可以在djangosnippets.com等东西上搜索;也许有人已经为你完成了这项工作。否则,我会建议查看这两个Django源代码并尝试将它们合并到您自己的模板标签中。

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>