2013-05-03 54 views
0

這裏是妖怪低效的代碼語句:簡潔如果在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

回答

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

這個怎麼樣?

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