Django: Reverse URL lookup with arbitrary URL components -
एक Django app, shop
मानें, जिसका urls.py मुख्य urls.py में शामिल है :
# मुख्य urls.py urlpatterns = पैटर्न ('', (आर '^ [^ /] + / दुकान /', ('shop.urls') शामिल हैं),)
टेम्पलेट्स। क्या इस योजना को उखाड़ता है, यह है कि उत्पन्न URL में वैश्विकध्यान दें, कि
/ दुकान
से पहले एक मनमानी उपसर्ग है यहदुकान
ऐप के लिए कोई दिलचस्पी नहीं है, यह केवल कुछ मिडलवेयर के लिए दिलचस्प है।
shop.urls
इस तरह दिख सकता है:# दुकान के urls.py urlpatterns = पैटर्न ('', url (r '^ $', सूचकांक, नाम = "दुकान_ इंडेक्स"), url (r '^ product / (? P & lt; id & gt; [ ^ /] +) $ ', उत्पाद, नाम = "दुकान_प्रोडक्ट"),)
अब मैं अपने कोड में
{% 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
Post a Comment