2013-02-13 30 views
0

我想爲我的博客格式化顯示標籤。我可以列出tag1,tag2,tag3等......就好。我甚至想通了如何消除最後一個逗號:loop.lenth ins jinja 2

{% if not forloop.last %}, {% endif %} 

我的問題是......我如何處理「和」?

例如:tag1,tag2和tag3。

這裏是規則

如果兩個標籤=和沒有逗號分隔。 如果3個或更多標籤=倒數第二個獲取「和」 從來沒有逗號或和在列表的末尾。

我希望我能在像這樣的Jinja2創建這些顯示規則...

{% if loop.index == forloop.last - 1 %}and {% endif %} 

當然,這個代碼導致

raise TemplateSyntaxError, "'if' statement improperly formatted" TemplateSyntaxError: 'if' statement improperly formatted

我有一種感覺有人會告訴我在應用程序中執行此操作;不是模板..但請解釋爲什麼...我應該使用自定義過濾器來做到這一點嗎?

+0

您是否將任何標記應用於循環中的標記,或者只是簡單地生成純文本字符串的名稱? – 2013-02-19 21:57:40

回答

1

建議您使用remove as much logic as possible from templates,以便您可以專注於演示文稿並避免在頁面渲染中添加失敗點,但始終存在臨界情況。

如果您定義了一個類似於內置join的自定義過濾器,您將保持更清晰的外觀模板。這裏有一個例子接受純文本標記名稱的列表,並返回一個字符串:

def join_tags(tags): 
    if not tags: 
     return '(no tags)' 
    elif len(tags) == 1: 
     return tags[0] 
    else: 
     return ', '.join(tags[:-1]) + ' and ' + tags[-1] 

app.jinja_env.filters['join_tags'] = join_tags 

模板用法:

{{ tags|join_tags }} 

如果你也是你的過濾器中添加標記,則必須將safe應用過濾器結果所以它不會被轉義。

+0

我遲了一年,但這是正確的答案。 – jwogrady 2014-04-08 07:24:47