मैं विकास के लिए Bottle.py और Google App Engine के dev_appserver के साथ Jinja2 टेम्पलेट का उपयोग कर रहा हूं। मैं चाहता हूं कि टेम्पलेट्स प्रत्येक अनुरोध पर स्वचालित रूप से पुनः लोड हो जाएं (या आदर्श रूप से जब वे बदलते हैं), ताकि मुझे सर्वर को पुनरारंभ करना न पड़े।Bottle.py में Jinja2 टेम्पलेट कैशिंग अक्षम करने का सबसे अच्छा तरीका क्या है?
बोतल के दस्तावेज़ों के अनुसार, आप bottle.debug(True)
पर कॉल करके टेम्पलेट कैशिंग अक्षम करने में सक्षम होना चाहिए।
जिन्जा अभी भी अपने टेम्पलेट्स को कैशिंग कर रहा है। मेरा मानना है कि यह बोतल jinja2 एडाप्टर लिखा गया है (यह सिर्फ एक डिफ़ॉल्ट Jinja2 लोडर का उपयोग करता है और कई विन्यास विकल्प का पर्दाफाश नहीं करता है)।
Jinja2 Docs बाद, मुझे लगता है कि मैं एक टेम्पलेट हर बार फिर से लोड को गति प्रदान की उम्मीद करेंगे इस कस्टम लोडर ने लिखा है, लेकिन यह काम करने के लिए या तो प्रतीत नहीं होता:
import settings
from bottle import jinja2_template
from bottle import Jinja2Template, template as base_template
class AutoreloadJinja2Template(Jinja2Template):
def loader(self, name):
def uptodate():
# Always reload the template if we're in DEVMODE (a boolean flag)
return not settings.DEVMODE
fname = self.search(name, self.lookup)
if fname:
with open(fname, "rb") as f:
source = f.read().decode(self.encoding)
return (source, fname, uptodate)
template = functools.partial(base_template,
template_adapter=AutoreloadJinja2Template,
template_lookup = settings.TEMPLATE_PATHS,
template_settings={
'auto_reload': settings.DEVMODE
}
)
टेम्पलेट्स अभी भी संचित किया जा रहा है जब तक मैं पुनः आरंभ dev_appserver। यह एक काफी आम समस्या होनी चाहिए। क्या किसी के पास कोई समाधान है जो काम करता है?
अद्यतन:
मैं की तरह कुछ कर रही समाप्त हो गया:
class CustomJinja2Template(Jinja2Template):
if settings.DEVMODE:
def prepare(self, *args, **kwargs):
kwargs.update({'cache_size':0})
return Jinja2Template.prepare(self, *args, **kwargs)
template = functools.partial(original_template, template_adapter=CustomJinja2Template)
यह हमेशा फिर से लोड करने के लिए टेम्पलेट्स का कारण बनता है, लेकिन एक अजगर मॉड्यूल को छुआ कर दिया गया है केवल यदि। यानी यदि आप सिर्फ एक टेम्पलेट फ़ाइल संपादित करते हैं, तो परिवर्तन तब तक प्रभावित नहीं होंगे जब तक आप इसे आयात करने वाली पाइथन फ़ाइलों में से किसी एक को संपादित नहीं करते। ऐसा लगता है जैसे टेम्पलेट्स को अभी भी कैश किया जा रहा है।
डाउनारोइंग क्योंकि cache_size = 0 तर्क दृश्य() सजावट या टेम्पलेट() फ़ंक्शन का उपयोग करके मेरे लिए काम नहीं करता है। यह भी चलाएं (पुनः लोडर = ट्रू) एक त्रुटि फेंकता है: "स्थानीय चर 'लॉकफाइल' असाइनमेंट से पहले संदर्भित" – arkanciscan
@arkanciscan यह बग शायद यह मेरे प्रतिक्रियाक से संबंधित नहीं है, लेकिन यह ठीक है। बस आपको पता है, मैंने बोतल को एक समस्या के रूप में आपकी टिप्पणी की सूचना दी है (https://github.com/defnull/bottle/issues/278)। क्या आप जिथब में बग के बारे में अधिक जानकारी दे सकते हैं? आप किस सर्वर एडाप्टर का उपयोग कर रहे हैं? धन्यवाद! बग रिपोर्ट के लिए – iurisilvio
+1, धन्यवाद :) – defnull