क्या प्रोग्राम को क्रमशः सर्वर को पुनरारंभ किए बिना Django में URL पैटर्न जोड़ने का कोई तरीका है?प्रोग्रामेटिक रूप से Django में यूआरएल पैटर्न जोड़ें?
या क्या डीजेगो को URL पैटर्न (URLconf) को पुन: संसाधित/कैश करने का कोई तरीका है?
क्या प्रोग्राम को क्रमशः सर्वर को पुनरारंभ किए बिना Django में URL पैटर्न जोड़ने का कोई तरीका है?प्रोग्रामेटिक रूप से Django में यूआरएल पैटर्न जोड़ें?
या क्या डीजेगो को URL पैटर्न (URLconf) को पुन: संसाधित/कैश करने का कोई तरीका है?
यदि आप कोड प्रीलोडिंग के बिना बंदूक का उपयोग करते हैं, तो बस बंदूकधारी मास्टर प्रक्रिया में एक एचयूपी भेजें, यह नए श्रमिकों को जन्म देगा जो नए कोड को लोड करेंगे, और पुराने खोए गए अनुरोधों को बिना किसी खोए अनुरोध के बंद कर देंगे!
मैंने django.core.urlresolvers
में कुछ चीजों को हैक करके इस तरह कुछ करने की कोशिश की - यह मेरे लिए काम करता था लेकिन ध्यान दें कि यह हैक है। मैं अभी भी कोड नहीं है, लेकिन मैं कुछ इस तरह किया:
urlresolvers.get_resolver()
का उपयोग करता है एक RegexURLResolver
जो यूआरएल को हल करने के लिए जिम्मेदार है पाने के लिए। इस फ़ंक्शन में None
पास करने से आपका "रूट" URLConf हो जाता है।get_resolver()
लोड किए गए URLConfs के लिए कैश, _resolver_cache
का उपयोग करता है।_resolver_cache
को रीसेट करने से Django को एक स्वच्छ URLResolver को फिर से बनाने के लिए मजबूर होना चाहिए।वैकल्पिक रूप से, आप रूट RegexURLResolver
है, जो इसे फिर से लोड करने के लिए Django के लिए मजबूर करना चाहिए की _urlconf_module
विशेषता अनसेट करने के लिए कोशिश कर सकते हैं (इस बारे में निश्चित नहीं है, हालांकि, यह संभव है कि मॉड्यूल अजगर द्वारा कैश किया जाएगा)।
from urlresolvers import get_resolver
delattr(get_resolver(None), '_urlconf_module')
फिर, इसकी गारंटी नहीं है कि इस काम करेंगे (मैं कोड से याद है कि मैं स्पष्ट रूप से किसी कारण से खारिज कर दिया है, वहां से काम कर रहा हूँ)। लेकिन django/core/urlresolvers.py निश्चित रूप से वह फ़ाइल है जिसे आप देखना चाहते हैं।
संपादित करें: इस के साथ कुछ प्रयोग करने के लिए निर्णय लिया है और यह काम नहीं किया ...
EDIT2:
के रूप में मैंने सोचा, अपने URL मॉड्यूल अजगर द्वारा संचित किया जाएगा। बस उन्हें पुनः लोड करना क्योंकि वे बदल सकते हैं (reload
का उपयोग कर)। यदि, आपकी समस्या यह है कि आप कुछ डेटा के आधार पर urlpatterns
गतिशील रूप से निर्माण कर रहे हैं जो बदल सकता है।
मैंने अपने रूट यूआरएल (project.urls) और एक उपन्यास मॉड्यूल (app.urls) में reload
कोशिश की। get_resolver(None).url_patterns
द्वारा प्रदर्शित होने वाले नए यूआरएल के लिए मुझे बस इतना करना था कि चाल यह आसान हो सकती है: मैन्युअल रूप से अपना यूआरएल मॉड्यूल पुनः लोड करें।
जब मुझे मौका मिलता है तो मैं इसके साथ खेलूँगा और देख सकता हूं कि यह काम करता है या नहीं। –
यह भी तेजी यह करने के लिए एक सुंदर तरीका:
http://codeinthehole.com/writing/how-to-reload-djangos-url-config/
सीधे शब्दों में, जो आपके मूल यूआरएल मॉड्यूल फिर से लोड करने है:
reload_urlconf()
आप 'mod_wsgi' का उपयोग कर रहे हैं? यदि ऐसा है, तो आप पूरे अपाचे सर्वर को पुनरारंभ किए बिना अपने ऐप को पुनरारंभ कर सकते हैं। –
@ एसएलॉट उत्पादन सर्वर के लिए हाँ, तो यह काम कर सकता है, आप एक विशिष्ट ऐप को कैसे पुनरारंभ करते हैं? क्या देव सर्वर के लिए कुछ भी समान है? –
@ एसएलओटी, 'देव सर्वर' के लिए मेरा मतलब है कि ब्यूट-इन डेवलपमेंट सर्वर जो Django के साथ आता है, उदाहरण के लिए: python manage.py runerver। मैंने आपकी पहली टिप्पणी को गलत समझा होगा, हालांकि, क्या आप सुझाव दे रहे थे कि एक अन्य Django ऐप को अन्य ऐप्स को पुनरारंभ किए बिना पुनरारंभ करना संभव है, या आप सुझाव दे रहे थे कि आप अपाचे को पुनरारंभ किए बिना Django/सभी ऐप्स को पुनरारंभ कर सकते हैं? मुझे पूर्व करने की ज़रूरत होगी। –