Jinja2

2012-03-24 14 views
20

में स्ट्रिंग इनट्स कास्टिंग करना मैं यूआरएल के माध्यम से टेम्पलेट को पास करने वाला एक int डालना चाहता हूं, लेकिन यह कहता है कि str फ़ंक्शन परिभाषित नहीं किया गया है।Jinja2

मैं इसके आसपास कैसे हो सकता हूं?

{% extends "base.html" %} 

{% block content %} 

    {% for post in posts %} 
    {% set year = post.date.year %} 
    {% set month = post.date.month %} 
    {% set day = post.date.day %} 
    {% set p = str(year) + '/' + str(month) + '/' + str(day) + '/' + post.slug %} 
    <h3> 
     <a href="{{ url_for('get_post', ID=p) }}"> 
      {{ post.title }} 
     </a> 
    </h3> 

     <p>{{ post.content }}</p> 
    {% else: %} 
      There's nothing here, move along. 
    {% endfor %} 

{% endblock %} 

उत्तर

25

Jinja2 भी ~ ऑपरेटर, जो स्वत: पहली स्ट्रिंग के लिए तर्क धर्मान्तरित परिभाषित करता है, + ऑपरेटर के लिए एक विकल्प के रूप में।

उदाहरण:

{% set p = year ~ '/' ~ month ~ '/' ~ day ~ '/' ~ post.slug %} 

Other operators देखें या, क्या तुम सच में str उपयोग करने के लिए, Environment.globals शब्दकोश को संशोधित करना चाहते हैं।

+1

यह सिर्फ मेरे दिमाग को उड़ा दिया। जिनजा के साथ काम करते हैं, Jinja2 अधिक से अधिक भयानक हो जाता है। – vectorfrog

4

आप join उपयोग कर सकते हैं:

यहाँ मेरी कोड है

{% set p = (year, month, day, post.slug)|join("/") %} 
11

अभिव्यक्ति में एक स्ट्रिंग को डालने के लिए, आप str(x) के बजाय x|string() का उपयोग करें।

string() फ़िल्टर का एक उदाहरण है, और इसके बारे में सीखने के लायक कई उपयोगी फिल्टर हैं।