2015-02-05 5 views
7

Sto cercando un metodo/modo che sia simile all'avvio di python. Quello che mi piacerebbe fare è collegare alcuni campi nella tabella che iniziano con "i-".Metodo simile a "startswith" in Jinja2/Flask

miei passi:

  1. ho creato il filtro, che restituiscono Vero/Falso:

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

poi collegati al modello:

{% 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, non funziona

Secondo passaggio. L'ho fatto senza filtro, ma nel modello

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

che funziona, ma a tale modello sono l'invio di diversi dati, e funziona solo per questo caso. Sto pensando che [: 2] potrebbe essere un po 'buggy.

Così provo a scrivere il filtro o forse c'è qualche metodo che salta nella documentazione.

+1

Che cosa significa "non funziona"? – dirn

+0

Errore interno del server – Ojmeny

risposta

3

L'espressione {% if {{ field | startswith }} %} non funziona perché non è possibile nidificare blocchi l'uno dentro l'altro. Probabilmente puoi scappare con {% if (field|startswith) %} ma un custom test piuttosto che un filtro, sarebbe una soluzione migliore.

Qualcosa di simile

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

environment.tests['link_field'] = is_link_field 

Poi nel modello, è possibile scrivere {% if field is link_field %}

20

Una soluzione migliore ....

È possibile utilizzare startswith direttamente in field.name perché field.name restituisce una stringa.

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

più, è possibile utilizzare qualsiasi funzione String, tra cui str.endswith(), per esempio.