2010-11-01 12 views
8

Django 1.2 ने एक नया टेम्पलेट लोडर पेश किया, जो कैश में डेटा संग्रहीत करता है (django.template.loaders.cached.Loader)।Django कैश किए गए टेम्पलेट लोडर के लिए कैश रीसेट करना

दुर्भाग्य से, मैं कैश को कैसे अमान्य कर रहा हूं और कब और कैसे रीसेट किया जाता है, इस बारे में कोई जानकारी नहीं मिली।

मैं इसे अपने सर्वर पर उपयोग करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि यह django पुनरारंभ पर रीसेट होगा (जो मेरे लिए पर्याप्त होगा)।

+0

ओह, प्रतीक्षा करें ... मुझे अभी एहसास हुआ है - यह memcached का उपयोग नहीं करता है, है ना? .. तो यह रीसेट django पुनरारंभ करने के बाद ... क्या मैं सही हूँ? – DataGreed

उत्तर

4

django के स्रोत में खुदाई करके, आप वर्तमान सर्वर उदाहरण के लिए टेम्पलेट लोडर को django.template.loader.template_source_loaders पर संग्रहीत कर सकते हैं।

जब आप कैश किए गए लोडर का उपयोग कर रहे हों, वहां केवल एक लोडर होगा। तो आप इसे प्राप्त कर सकते हैं और टेम्पलेट कैश को रीसेट करने के लिए अपने रीसेट फ़ंक्शन को कॉल कर सकते हैं।

यहां कुछ कोड स्निपेट हैं, मैंने इसे स्वयं परीक्षण नहीं किया है।

from django.template.loader import template_source_loaders 
loader = template_source_loaders[0] 
loader.reset() 

आप django.template.loaders.cached जाँच हैं, तो आप देख सकते हैं कि Django बस एक चर template_cache का उपयोग टेम्पलेट पथ कैश करने के लिए टेम्पलेट का नाम धारण करने के लिए। यह memcached का उपयोग नहीं करता है। इसलिए django पुनरारंभ होने पर इसे रीसेट किया जाना चाहिए।

+0

Thanx, मैंने अभी खुद को खोज लिया है। तो, django सर्वर को पुनरारंभ करना पर्याप्त होगा =) – DataGreed

+0

यह होगा जब आपके पास एक थ्रेड और एक प्रक्रिया होती है तो केवल डीबग सर्वर के लिए काम करें। उत्पादन पर कई धागे और प्रक्रियाएं हैं। यह वहां काम नहीं करेगा। – un1t

+0

django 1.9.9 के साथ काम नहीं करता है – patroqueeet

4
from django.template.loader import template_source_loaders 

def reset_template_cache(): 
    if not template_source_loaders: 
     return 

    for loader in template_source_loaders: 
     loader.reset() 

ये लीजिए :)

1

केवल इस समाधान, उत्पादन वातावरण सहित सर्वर को पुनः आरंभ करने के बिना गारंटी काम करेंगे, और आप 'django.template.loaders.cached.Loader' बैकएंड का उपयोग कर रहे हैं, भले ही:

import django.template.loader 

def reset_template_cache(): 
    if django.template.loader.template_source_loaders: 
     for t in django.template.loader.template_source_loaders: 
      t.reset() 

यह स्पष्ट है पूर्ण आयात, जिसका उपयोग वैश्विक चर पैचिंग के लिए किया जा सकता है। आप यह सुनिश्चित करें कि अन्य उत्तर {% include 'some_template' %} टेम्पलेट टैग ('some_template' का कैश loader.reset() का उपयोग कर जहां loader सिर्फ template_source_loaders की इटरेटर रिश्तेदार आयात द्वारा आयातित है के बाद reseted नहीं किया जा उपयोग करने के बाद गलत हैं हो सकता है।

मैं अमान्यकरण टेम्पलेट्स भंडारण के लिए इस विधि का इस्तेमाल किया डेटाबेस में (django-dbtemplates लाइब्रेरी द्वारा निर्मित), और {% include %} टेम्पलेट टैग द्वारा सामान्य टेम्पलेट्स में शामिल किया गया।

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