मेरे पास एक मॉड्यूल है जो टेम्पलेट्स प्रस्तुत करने के लिए Jinja2 का उपयोग कर SQL क्वेरी बनाने और निष्पादित करता है। मॉड्यूल स्वयं और 'टेम्पलेट्स' नामक एक निर्देशिका नेटवर्क ड्राइव पर स्थित है जिसे मैं नेटवर्क पर कई मशीनों से एक्सेस कर सकता हूं।कामकाजी निर्देशिका से अलग स्थान से Jinja2 लोड टेम्पलेट्स
सबकुछ काम करता है जब मैं उसी निर्देशिका के अंदर से काम करता हूं, जैसा कि अपेक्षित है।
जब मैं इस मॉड्यूल को एक अलग स्थान से लोड करने और उपयोग करने का प्रयास करता हूं, तो मुझे TemplateNotFound:
त्रुटि मिलती है। समारोह में ही इस तरह दिखता है, त्रुटि वाली लाइन के साथ प्रकाश डाला:
from jinja2 import Environment, FileSystemLoader, Template, meta
def get_sql_query(position):
filename = "PositionDelta.sqltemplate"
# Create Jinja2 Environment, using the 'templates' folder
Error here --> env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template(filename)
# Get Source of template file
template_source = env.loader.get_source(env, filename)[0]
# Parse template source and get all undeclared variables
parsed_content = env.parse(template_source)
template_variables = list(meta.find_undeclared_variables(parsed_content))
# Get all tag values associated with position
tag_values = get_tags_list(position)
# Combine template variables and tag values into dictionary and render sql query from template
dictionary = dict(zip(template_variables, tag_values))
sql_query = template.render(dictionary)
return sql_query
इस समारोह है कि विफल हो रहा है निम्न पंक्ति है:
env = Environment(loader=FileSystemLoader('templates'))
मुझे लगता है कि जब मैं FileSystemLoader
फ़ंक्शन को कॉल करें, यह खोज किए जाने के कार्य फ़ोल्डर के सापेक्ष टेम्पलेट फ़ोल्डर के लिए। मॉड्यूल स्थान के सापेक्ष टेम्पलेट निर्देशिका को देखने के लिए मैं इसे कैसे सेट कर सकता हूं?
यही कुछ कारण के लिए समस्या को हल करने के लिए जा रहा नहीं कर रहा है: मैं क्योंकि यह टेम्पलेट के लिए काम निर्देशिका के बजाय पैकेज ही है, के सापेक्ष रिश्तेदार फाइलें लग रहा है Jinja2 के पैकेज लोडर विधि का उपयोग करने का फैसला किया: 1. मुझे लिनक्स और विंडोज मशीनों से टेम्पलेट निर्देशिका तक पहुंचने की आवश्यकता है। मैं दोनों मामलों के लिए वहां एक कथन बयान डाल सकता था। 2. मैं इस मामले के लिए सहकर्मियों के साथ मॉड्यूल साझा करना चाहता हूं कि वे ऑफ़लाइन काम करना चाहते हैं और नेटवर्क तक पहुंच नहीं है। इसके बजाए, मैंने अपने सभी मॉड्यूल को एक पैकेज में एकत्र किया और जिन्जा का इस्तेमाल किया। पैकेज लोडर() - उत्तर देखें – cbcoutinho