2015-02-05 5 views
7

में 'startwith' के समान विधि मैं पाइथन के स्टार्ट के साथ विधि/तरीका की तलाश में हूं। मैं जो करना चाहता हूं वह तालिका में कुछ फ़ील्ड को लिंक करता है जो "i-" से शुरू होता है।Jinja2/Flask

मेरे कदम:

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

यही काम करता है, लेकिन यह है कि टेम्पलेट के लिए विभिन्न datas भेज रहे हैं, और यह केवल इस मामले के लिए काम करता है। मैं सोच रहा हूं कि [: 2] थोड़ी सी छोटी हो सकती है।

तो मैं फ़िल्टर लिखने की कोशिश करता हूं या शायद कुछ विधि है जो मैं प्रलेखन में छोड़ देता हूं।

+1

"यह काम नहीं करता" का क्या अर्थ है? – dirn

+0

आंतरिक सर्वर त्रुटि – Ojmeny

उत्तर

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() सहित किसी भी स्ट्रिंग फ़ंक्शन का उपयोग कर सकते हैं,।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^