这是怪物低效的代码:
{% 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 伪代码,它以我认为可能的效率表达了同样的事情。
{% 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 %}
正如你所看到的,使用两个三级语句会很棒,而且视觉效率更高。然而这段代码不起作用。
任何建议都会很棒!
谢谢,姜戈菜鸟
结束时:
我们得出的结论是,遵循 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 %}