简洁如果在Django模板系统

问题描述:

这里是妖怪低效的代码语句:简洁如果在Django模板系统

{% for link in header_links %} 
    {% if not link.image %} 
    {% if not link.url %} 
      <li><a href="{{ link|lower }}">{{ link }}</a></li> 
     {% else %} 
      <li><a href="{{ link.url }}">{{ link }}</a></li> 
     {% endif %} 
    {% else %} 
    {% if not link.url %} 
      <li><a href="{{ link|lower }}"><img src="{{ link }}" /></a></li> 
     {% else %} 
      <li><a href="{{ link.url }}"><img src="{{ link.image }}" /></a></li> 
     {% endif %} 
    {% endif%} 
{% endfor %} 

正如你所看到的,这是荒谬的。一个简单的第三级或第二级声明是完全合适的,除了{%%}块之外,我不能使用过滤器和类似的东西访问变量。

这是我的python/django pseduo代码,它表达与我认为可能的效率相同的东西。

{% for link in header_links %} 
      <li><a href="{% print link|lower if not image.url else image.url %}">{% print "<img src='" + link.image + "' />" if link.image else print link %}</a></li> 
{% endfor %} 

正如你所看到的,使用两个第三语句将会非常棒,而且视觉效率更高。然而这个代码不起作用。

任何建议将是真棒!

感谢, Django的菜鸟

最后:

我们得出的结论,继MVC模式导致我做“重”提升至控制器部分,并给予视图小算盘尽可能。

的伪代码,我将最终使用情况如下:

在控制器视图

header_links = {} 
links = Link.object.all() 
for link in links: 
    header_links['url'] = (link.name if not link.url else link.url) 
    header_links['name'] = (link.name if not link.image else "<img src='" + link.image +"' />") 
context = Context({ 
"header_links": header_links 
}) 

{% for link in header_links %} 
    <li><a href="{{ link['url']|lower }}"><img src="{{ link['name'] }}" /></a></li> 
{% endfor %} 
+2

如何在代码中执行此处理并返回“链接”的正确值?有时候将视图(你的模板)尽可能地变成“愚蠢的”是一种可行的方式! – halflings 2013-05-03 01:43:35

+0

你是对的!太棒了!我知道我正在做这个糟糕的!这是mvc的方式!谢谢! – eatonphil 2013-05-03 02:34:30

+0

随时为您解答问题并获得您的信任! – eatonphil 2013-05-03 02:36:01

只是改写了你的if语句,我认为这方式看起来更明显。不是最聪明的解决方案,但它更具可读性。

{% for link in header_links %} 
    {% if not link.image and not link.url%} 
     <li><a href="{{ link|lower }}">{{ link }}</a></li> 
    {% endif %} 
    {% if not link.image and link.url%} 
      <li><a href="{{ link.url }}">{{ link }}</a></li> 
    {% endif %} 
    {% if link.image and not link.url%} 
     <li><a href="{{ link|lower }}"><img src="{{ link }}" /></a></li> 
    {% endif %} 
    {% if link.image and link.url%} 
     <li><a href="{{ link.url }}"><img src="{{ link.image }}" /></a></li> 
    {% endif %} 
{% endfor %} 

这个怎么样?

{% for link in header_links %} 
    <li> 
     {% if link.url and link.image %} 
      <a href="{{ link.url }}"><img src="{{ link.image }}" /></a> 
     {% elif not link.url %} 
      <a href="{{ link|lower }}"><img src="{{ link }}" /></a> 
     {% elif not link.image %} 
      <a href="{{ link.url }}">{{ link }}</a> 
     {% else %} 
      <a href="{{ link|lower }}">{{ link }}</a> 
     {% endif%} 
    </li> 
{% endfor %}