Django - URL मैपिंग

अब जब हमारे पास पिछले अध्यायों में बताए गए अनुसार काम करने का नजरिया है। हम उस दृश्य को URL के माध्यम से एक्सेस करना चाहते हैं। Django का URL मैपिंग के लिए अपना तरीका है और यह आपकी परियोजना url.py फ़ाइल को संपादित करके किया जाता है(myproject/url.py)। Url.py फ़ाइल दिखती है -

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
)

जब कोई उपयोगकर्ता आपके वेब ऐप पर एक पेज के लिए अनुरोध करता है, तो Django कंट्रोलर url.py फ़ाइल के माध्यम से संबंधित दृश्य की तलाश करता है, और फिर HTML प्रतिक्रिया या 404 नहीं मिली त्रुटि, यदि नहीं मिली है, तो वापस कर दें। Url.py में, सबसे महत्वपूर्ण बात यह है कि"urlpatterns"टपल। यह वह जगह है जहाँ आप URL और विचारों के बीच मानचित्रण को परिभाषित करते हैं। एक मैपिंग URL पैटर्न में एक टपल है जैसे -

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
   url(r'^hello/', 'myapp.views.hello', name = 'hello'),
)

चिह्नित लाइन myapp / view.py फ़ाइल में बनाए गए हैलो व्यू को URL "/ होम" मैप करती है। जैसा कि आप देख सकते हैं कि मानचित्रण तीन तत्वों से बना है -

  • The pattern- जिस URL को आप हल करना चाहते हैं, उसका एक regexp मैप और मैप करें। सब कुछ जो अजगर के 'पुनः' मॉड्यूल के साथ काम कर सकता है पैटर्न के लिए योग्य है (उपयोगी है जब आप यूआरएल के माध्यम से मापदंडों को पारित करना चाहते हैं)।

  • The python path to the view - जब आप किसी मॉड्यूल का आयात कर रहे हों, तब भी।

  • The name- URL उलटने का कार्य करने के लिए, आपको ऊपर दिए गए उदाहरणों में दिए गए URL पैटर्न का उपयोग करना होगा। एक बार हो जाने के बाद, बस अपने दृश्य को एक्सेस करने के लिए सर्वर शुरू करें: http: //127.0.0.1/hello

आपका URL व्यवस्थित करना

अब तक, हमने "myprojects / url.py" फ़ाइल में URL बनाए हैं, हालाँकि जैसा कि पहले Django के बारे में बताया गया था और एक ऐप बनाया गया था, सबसे अच्छा बिंदु विभिन्न परियोजनाओं में अनुप्रयोगों का पुन: उपयोग करने में सक्षम होना था। आप आसानी से देख सकते हैं कि समस्या क्या है, यदि आप अपने सभी URL को "projecturl.py" फ़ाइल में सहेज रहे हैं। इसलिए सबसे अच्छा अभ्यास प्रति एप्लिकेशन "url.py" बनाना है और इसे हमारी मुख्य परियोजनाओं url.py फ़ाइल में शामिल करना है (हमने पहले व्यवस्थापक इंटरफ़ेस के लिए व्यवस्थापक URL शामिल किए थे)।

यह कैसे किया जाता है?

हमें निम्नलिखित कोड का उपयोग करके myapp में एक url.py फ़ाइल बनाने की आवश्यकता है -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('', url(r'^hello/', 'myapp.views.hello', name = 'hello'),)

तब myproject / url.py निम्नलिखित में बदल जाएगा -

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
   url(r'^myapp/', include('myapp.urls')),
)

हमने myapp एप्लीकेशन से सभी URL को शामिल किया है। Home.html जिसे "/ hello" के माध्यम से एक्सेस किया गया था, अब "/ myapp / hello" है, जो वेब ऐप के लिए बेहतर और अधिक समझने योग्य संरचना है।

आइए अब कल्पना करें कि हमारे पास "सुबह" में एक और दृश्य है और हम इसे myapp / url.py में मैप करना चाहते हैं, फिर हम अपने myapp / url.py को बदलेंगे -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
   url(r'^hello/', 'myapp.views.hello', name = 'hello'),
   url(r'^morning/', 'myapp.views.morning', name = 'morning'),
)

इसको फिर से जाना जा सकता है -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),)

जैसा कि आप देख सकते हैं, अब हम अपने पहले तत्व का उपयोग करते हैं urlpatternsटपल। यह तब उपयोगी हो सकता है जब आप अपना ऐप नाम बदलना चाहते हैं।

दृश्य के लिए पैरामीटर भेजना

अब हम जानते हैं कि URL को कैसे मैप करना है, उन्हें कैसे व्यवस्थित करना है, अब आइए देखें कि पैरामीटर को विचारों को कैसे भेजें। एक क्लासिक नमूना लेख उदाहरण है (आप "/ लेख / लेख_आईडी" के माध्यम से एक लेख का उपयोग करना चाहते हैं)।

पासिंग मापदंडों को उनके साथ कैप्चर करके किया जाता है regexpURL पैटर्न में। यदि हमारे पास "myapp / view.py" में निम्नलिखित की तरह एक दृश्य है

from django.shortcuts import render
from django.http import HttpResponse

def hello(request):
   return render(request, "hello.html", {})

def viewArticle(request, articleId):
   text = "Displaying article Number : %s"%articleId
   return HttpResponse(text)

हम इसे myapp / url.py में मैप करना चाहते हैं, इसलिए हम इसे "/ myapp / article / articleId" के माध्यम से एक्सेस कर सकते हैं, हमें "myapp / url.py" में निम्नलिखित की आवश्यकता है -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),)

जब Django url देखेगा: "/ myapp / article / 42" यह व्यूआर्टिकल व्यू के मापदंडों को '42' पास कर देगा, और आपके ब्राउज़र में आपको निम्न परिणाम प्राप्त होने चाहिए -

ध्यान दें कि मापदंडों का क्रम यहां महत्वपूर्ण है। मान लीजिए कि हम एक वर्ष के एक महीने के लेखों की सूची चाहते हैं, तो आइए एक व्यूआर्टिकल्स दृश्य जोड़ें। हमारा नजरिया बन जाता है -

from django.shortcuts import render
from django.http import HttpResponse

def hello(request):
   return render(request, "hello.html", {})

def viewArticle(request, articleId):
   text = "Displaying article Number : %s"%articleId
   return HttpResponse(text)

def viewArticle(request, month, year):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

अनुरूप url.py फ़ाइल की तरह दिखेगा -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
   url(r'^articles/(\d{2})/(\d{4})', 'viewArticles', name = 'articles'),)

अब जब आप "/ myapp / articles / 12/2006 /" पर जाते हैं, तो आपको '2006/12 के प्रदर्शन लेख' मिलेंगे, लेकिन यदि आप मापदंडों को उलटते हैं तो आपको वही परिणाम नहीं मिलेगा।

उससे बचने के लिए, URL पैरामीटर को व्यू पैरामीटर से लिंक करना संभव है। उसके लिए, हमारेurl.py बन जाएगा -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
   url(r'^articles/(?P\d{2})/(?P\d{4})', 'viewArticles', name = 'articles'),)