2013-02-09 15 views
6

मैं जिन्जा 2 के लिए नया हूं और सोच रहा हूं कि टेम्पलेट बनाने के दौरान, जेनरेट होने के दौरान, कंसोल पर प्रिंट करने या कुछ आउटपुट को किसी प्रकार की स्ट्रीम पर रीडायरेक्ट करने का कोई तरीका है या नहीं?jinja2 कंसोल या लॉगिंग करने के लिए प्रिंट

चूंकि जिनजा 2 टेम्पलेट्स में तर्क हो सकता है, मुझे लगता है कि कभी-कभी किसी प्रकार की लॉगफाइल में कुछ जानकारी लॉग इन करने के लिए उपयोगी होगा, या कम से कम कंसोल पर मुद्रित हो जाएगा।

क्या यह संभव है या मैं सिर्फ कचरा बोल रहा हूं?

उत्तर

7

मुझे लगता है कि आप इसे फ़िल्टर (http://jinja.pocoo.org/docs/api/#custom-filters) या एक्सटेंशन (http://jinja.pocoo.org/docs/extensions/#adding-extensions) का उपयोग करके प्राप्त कर सकते हैं। विचार केवल फ़िल्टर या एक्सटेंशन को कंसोल पर प्रिंट करना है।

परीक्षण किया लेकिन नहीं फिल्टर की तरह कुछ किया जाना चाहिए:

...<p>Hello world!</p> {{"debug text!"|debug}}... 

उत्पादन कोड पर डिबग दूर करने के लिए याद रखें:

def debug(text): 
    print text 
    return '' 

environment.filters['debug']=debug 

के रूप में इस्तेमाल किया जा करने के लिए!

+0

ओह शांत! मुझे पता था कि इसे हासिल करने का कोई तरीका होना चाहिए। अब, मुझे इसके साथ कोई समस्या है। मैं कस्टम फ़िल्टर को शाब्दिक तार नहीं भेज सकता, मैं इसे {% सेट टेक्स्ट = "डीबग टेक्स्ट के साथ प्राप्त कर सकता हूं!" %} टैग, और फिर {{text | डीबग}}। मुझे नहीं पता कि शाब्दिक तारों को फ़िल्टर में भेजा जा सकता है या नहीं ...: -o –

+0

अच्छी तरह से, आंशिक रूप से हल किया गया है (या शायद यह वही तरीका है) '()' का उपयोग करके सभी स्ट्रिंग को संलग्न करने के लिए प्रिंट। उदाहरण के लिए {{("डीबग टेक्स्ट!") | डीबग}}। या अधिक सटीक: {{("डीबग टेक्स्ट! मान:" ~ valueINeedToLog) | डीबग}} –

2

एक समान है, लेकिन थोड़ा अलग दृष्टिकोण का उपयोग संदर्भ प्रोसेसर:

अजगर/कुप्पी में:

@app.context_processor 
def utility_functions(): 
    def print_in_console(message): 
     print str(message) 

    return dict(mdebug=print_in_console) 

jinja2 में, इसे कहीं भी उपयोग इस प्रकार है:

{{ mdebug("any text or variable") }} 
संबंधित मुद्दे