मेरी urls.py
फ़ाइल में, मेरे पास है:मैं नामित यूआरएल पैटर्न के बजाय फ़ंक्शन संदर्भ के साथ django.core.urlresolvers.reverse का उपयोग कैसे करूं?
from myapp import views
...
(r'^categories/$', views.categories)
कहाँ categories
myapp/views.py
अंदर एक दृश्य के कार्य है। कोई अन्य URLconf लाइन संदर्भ views.categories
।
एक यूनिट परीक्षण फ़ाइल में, मैं केवल '/ श्रेणियां /' (डीआरवाई और वह सब) की प्रतिलिपि बनाने के बजाय django.core.urlresolvers.reverse()
का उपयोग करके इस यूआरएल को पकड़ने की कोशिश कर रहा हूं। तो, मेरे पास है:
from django.core.urlresolvers import reverse
from myapp import views
...
url = reverse(views.categories)
जब मैं अपने परीक्षण चलाने के लिए, मैं एक NoReverseMatch
त्रुटि मिलती है:
NoReverseMatch: Reverse for '<function categories at 0x1082f30>' with arguments '()' and keyword arguments '{}' not found.
अगर मैं URL पैटर्न एक नामित पैटर्न बनाने के लिए, इस तरह यह सिर्फ ठीक से मेल खाता है:
url(r'^categories/$', views.categories, 'myapp-categories')
और यह मैच के लिए पैटर्न नाम का उपयोग करें:
url = reverse('myapp-categories')
लेकिन जहां तक मैं the reverse
documentation से बता सकता हूं, मुझे इसे reverse
का उपयोग करने के लिए नामित यूआरएल पैटर्न बनाने की आवश्यकता नहीं है।
कोई विचार क्या मैं गलत कर रहा हूं?
रिवर्स प्रलेखन कहता है कि आपको नामित यूआरएल का उपयोग करने या अपने यूआरएल कॉन्फ़िगर में इस्तेमाल किए गए फ़ंक्शन का नाम पास करने की आवश्यकता है, और इसे स्ट्रिंग के रूप में पारित किया जा सकता है।तो या तो इसे एक नामित यूआरएल बनाएं या "views.categories" का प्रयोग करें। – camflan
नवीनतम दस्तावेज का कहना है कि दृश्य नाम "या तो एक फ़ंक्शन संदर्भ, या नाम का स्ट्रिंग संस्करण" है, इसलिए इसे स्ट्रिंग होने की आवश्यकता नहीं है: –