Django: Reverse URL lookup with arbitrary URL components -


एक Django app, shop मानें, जिसका urls.py मुख्य urls.py में शामिल है :

  # मुख्य urls.py urlpatterns = पैटर्न ('', (आर '^ [^ /] + / दुकान /', ('shop.urls') शामिल हैं),)   

ध्यान दें, कि / दुकान से पहले एक मनमानी उपसर्ग है यह दुकान ऐप के लिए कोई दिलचस्पी नहीं है, यह केवल कुछ मिडलवेयर के लिए दिलचस्प है।

shop.urls इस तरह दिख सकता है:

  # दुकान के urls.py urlpatterns = पैटर्न ('', url (r '^ $', सूचकांक, नाम = "दुकान_ इंडेक्स"), url (r '^ product / (? P & lt; id & gt; [ ^ /] +) $ ', उत्पाद, नाम = "दुकान_प्रोडक्ट"),)  

अब मैं अपने कोड में {% url%} का उपयोग करना चाहता हूं > दुकान टेम्पलेट्स। क्या इस योजना को उखाड़ता है, यह है कि उत्पन्न URL में वैश्विक urls.py से उपसर्ग शामिल नहीं है उत्पन्न यूआरएल अधिक दिखते हैं, जैसे

  / ^ / shop / product / 1  

प्रश्न: अब, वहां है रिवर्स लुकअप को सिर्फ उसी उपसर्ग का उपयोग करने के लिए एक संभावना (Django 1.2 या svn trunk में), जो वर्तमान यूआरएल में है? उदाहरण के लिए, यदि request.path है, तो / foo / shop / , उस {% urls shop_product id = 1%} रिटर्न

  / foo / shop / product / 1  

एक ही तरह से मैं आया था उपसर्ग को गले लगाने और इसे दुकान ऐप के विचार, लेकिन यह वास्तव में एक बुरा समाधान है, क्योंकि दुकान के बाद से उस चीज़ से निपटना पड़ता है जिसकी आवश्यकता नहीं है।

नहीं है, वैसे भी एक सीधा डीजेंगो मार्ग नहीं है। डीजेंगो को यह जानने का कोई अंदाजा नहीं है कि आप [^ /] + के साथ क्या मतलब है, आपके मामले में यह एक उपसर्ग है जिसे एक रिवर्स यूआरएल लुकअप में गतिशील रूप से जोड़ा जाना चाहिए।

मुझे आश्चर्य होता है कि आप मिडलवेयर क्यों जोड़ते हैं एक यूआरएल के लिए विशिष्ट जानकारी और यहां तक ​​कि पैरामीटरों को भी प्राप्त नहीं किया जा सकता है, ऐसा कुछ करना यह है कि आप परेशानी के लिए पूछ रहे हैं इमो यदि आप कहते हैं कि उपसर्ग मिडलवेयर-विशिष्ट है, तो यह मिडलवेयर के बाहर कहीं कहीं गड़बड़ करने का मतलब नहीं है।

एक समाधान जो काम कर सकता था (यह परीक्षण नहीं करता) आपके मिडलवेयर में सेट हो रहा है जैसे environment_prefix संदर्भ संदर्भ चर का अनुरोध करें, फिर यूआरएल से पहले इस मैन्युअल रूप से जोड़ें। तो ऐसा कुछ:

  / {{environment_prefix}} {% फ़िल्टर टुकड़ा: "1:"%} {% url shopview%} {% endfilter%}  

एक और possiblity अपने यूआरएल टेम्पलेट टैग (यूआरएल templatetag से विरासत में मिली) को लागू करने के लिए हमेशा वर्तमान उपसर्ग को शामिल करने की कोशिश करना है जो कि फिर से मिडलवेयर द्वारा निर्धारित संदर्भ चर हो सकता है। / html>

Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -