简洁的django模板系统中的语句

时间:2013-05-03 00:33:22

标签: django templates

这是怪物效率低下的代码:

{% 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 Noob

在结束时:

我们得出的结论是,遵循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 个答案:

答案 0 :(得分:2)

刚刚重写了你的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 %}

答案 1 :(得分:1)

这个怎么样?

{% 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 %}