2015-02-05 45 views
7

我正在尋找類似於python的startswith的方法/方法。 我想要做的是鏈接表中以「i-」開頭的一些字段。在Jinja2/Flask中與'startswith'類似的方法

我的步驟:

  1. 我已經創建過濾器,返回真/假:

    @app.template_filter('startswith') 
    def starts_with(field): 
        if field.startswith("i-"): 
          return True 
        return False 
    

然後將其連接到模板:

{% for field in row %} 
      {% if {{ field | startswith }} %} 
       <td><a href="{{ url_for('munin') }}">{{ field | table_field | safe }}</a></td> 
      {% else %} 
       <td>{{ field | table_field | safe}}</td> 
      {% endif %} 
    {% endfor %} 

Unfortunatetly,它不起作用。

第二步。我做到了不帶過濾器,但在模板

{% for field in row %} 
      {% if field[:2] == 'i-' %} 
       <td><a href="{{ url_for('munin') }}">{{ field | table_field | safe }}</a></td> 
      {% else %} 
       <td>{{ field | table_field | safe}}</td> 
      {% endif %} 
    {% endfor %} 

這一工程,但該模板被髮送不同的上傳數據,它僅適用於這種情況。我在想[:2]可能會有一些小問題。

所以我嘗試寫過濾器或者可能有一些我跳過文檔的方法。

+1

「它不起作用」是什麼意思? – dirn 2015-02-05 15:53:43

+0

內部服務器錯誤 – Ojmeny 2015-02-06 10:19:15

回答

3

表達式{% if {{ field | startswith }} %}將無法​​工作,因爲您不能在彼此之間嵌套塊。你可能可以逃脫{% if (field|startswith) %},但custom test而不是過濾器,將是一個更好的解決方案。

喜歡的東西

def is_link_field(field): 
    return field.startswith("i-"): 

environment.tests['link_field'] = is_link_field 

然後在你的模板,你可以寫{% if field is link_field %}

20

更好的解決方案....

您可以直接在field.name使用startswith因爲field.name返回一個字符串。

{% if field.name.startswith('i-') %} 

更多的,你可以使用任何字符串函數,例如str.endswith()

相關問題