क्या django 2.0 के लिए urls.py में पथ () या url () का उपयोग करना बेहतर है?


131

एक django ऑनलाइन पाठ्यक्रम में, प्रशिक्षक ने हमें url()फ़ंक्शन का उपयोग करने के लिए विचारों को कॉल करने और urlpatterns सूची में नियमित अभिव्यक्तियों का उपयोग करने के लिए उपयोग किया है। मैंने इसके अन्य उदाहरणों को यूट्यूब पर देखा है। जैसे

from django.contrib import admin
from django.urls import include
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^polls/', include('polls.urls')),
]


#and in polls/urls.py

urlpatterns = [        
    url(r'^$', views.index, name="index"),
]

हालांकि, Django ट्यूटोरियल के माध्यम से जाने के path()बजाय , वे इसके बजाय उपयोग करते हैं:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name="index"),        
]

इसके अलावा नियमित रूप से अभिव्यक्तियाँ path()फ़ंक्शन के साथ काम path(r'^$', views.index, name="index")नहीं करती हैं क्योंकि यह mysite.com/polls/देखने को नहीं मिलेगा ।

क्या path()रेगेक्स के बिना उपयोग करना उचित तरीके से आगे बढ़ रहा है? है url()और अधिक शक्तिशाली लेकिन तो वे उपयोग कर रहे हैं और अधिक जटिल path()के साथ हमें बाहर शुरू करने के लिए? या यह विभिन्न नौकरियों के लिए विभिन्न उपकरणों का मामला है?


2
यदि आप एक ट्यूटोरियल का अनुसरण कर रहे हैं, तो मैं जिस भी शैली में ट्यूटोरियल का उपयोग करूँगा, गलतियों को रोकने के लिए path()और बीच में स्विच करते समय उपयोग करूँगा url()। यदि आप regexes का उपयोग करना चाहते हैं या करना चाहते हैं, तो आपको इसका उपयोग करना चाहिए re_path()या url()। इसके अलावा, मुझे लगता है कि यह वास्तव में आप पर निर्भर करता है कि आप किसे चुनते हैं।
अलसादेयर

जवाबों:


174

Url के लिए Django प्रलेखन से

url(regex, view, kwargs=None, name=None)यह फ़ंक्शन एक अन्य नाम है django.urls.re_path()। भविष्य में रिलीज होने के बाद इसे हटाए जाने की संभावना है।

के बीच महत्वपूर्ण अंतर है pathऔर re_pathयह है कि pathregex के बिना मार्ग का उपयोग करता है

आप re_pathजटिल रीगेक्स कॉल के लिए उपयोग कर सकते हैं और बस pathसरल लुकअप के लिए उपयोग कर सकते हैं


1
विस्तृत जानकारी के लिए धन्यवाद! re_pathतब मैं देख रहा हूँ।
पाले सेओढ़ लिया

65

नया django.urls.path()फ़ंक्शन सरल, अधिक पठनीय URL रूटिंग सिंटैक्स की अनुमति देता है। उदाहरण के लिए, पिछले Django रिलीज़ से यह उदाहरण:

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)

के रूप में लिखा जा सकता है:

path('articles/<int:year>/', views.year_archive)

django.conf.urls.url() पिछले संस्करणों से समारोह अब के रूप में उपलब्ध है django.urls.re_path()। पुराना स्थान पीछे की संगतता के लिए रहता है, बिना आसन्न पदावनति के। पुराना django.conf.urls.include()फ़ंक्शन अब आयात करने योग्य है django.urlsजिससे आप उपयोग कर सकते हैं:

from django.urls import include, path, re_path

में URLconfs । आगे पढ़ने के लिए django doc


10
आपके path()उदाहरण के बाद से थोड़ा भ्रामक गैर-चार-अंकीय संख्या की अनुमति देता है।
ब्रेनकोर

/<int:year>/प्रतीक है कि वर्ष पूर्णांक में होना चाहिए, मैं सुझाव है कि आप आधिकारिक दस्तावेज के माध्यम से देखो।
सिल्वरनस अकुबो

2
@silvablaze जैसा ब्रेनकोर ने कहा है, के intबराबर नहीं है [0-9]{4}। यह पूर्णांक के लिए उपयोग किया जाता है या नहीं इस संबंध पर कोई असर नहीं है। शायद अगर आप अपनी तुलना के [0-9]{4}साथ प्रतिस्थापित करते हैं तो [0-9]+यह कम गलत हो सकता है, हालाँकि आपको अभी भी अंतिम परिणाम के प्रकार (स्ट्रिंग बनाम इंट?) से निपटने की आवश्यकता हो सकती है।
Jan Kyu Peblik

इस विषय पर स्पष्ट कट उत्तर है। धन्यवाद।
विकासभाट

19

pathDjango 2.0 में बस नया है, जो केवल कुछ हफ्ते पहले जारी किया गया था। अधिकांश ट्यूटोरियल नए सिंटैक्स के लिए अपडेट नहीं किए गए हैं।

यह निश्चित रूप से चीजों को करने का एक सरल तरीका माना जाता था; मैं यह नहीं कहूंगा कि URL अधिक शक्तिशाली है, हालांकि, आपको किसी भी प्रारूप में पैटर्न व्यक्त करने में सक्षम होना चाहिए।


9

नियमित रूप से अभिव्यक्तियाँ path()निम्न तर्कों के साथ कार्य नहीं करती हैं path(r'^$', views.index, name="index"):।

यह इस तरह होना चाहिए path('', views.index, name="index"):।

नियमित अभिव्यक्ति दर्ज करने के लिए 1 तर्क रिक्त होना चाहिए।


2
हाँ, मुझे लगता है कि आरईएस का उपयोग करने के लिए ऊपर आपको बताया गया है कि आपको इसके बजाय re_path () फ़ंक्शन का उपयोग करना होगा।
FrostedCookies

8

पथ Django 2.0 की एक नई विशेषता है। यहां बताया गया: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0

अधिक पाइथोनिक तरीके की तरह देखें, और तर्क में नियमित अभिव्यक्ति का उपयोग न करने के लिए सक्षम करें जिसे आप पास करते हैं ... आप छूट के लिए int () फ़ंक्शन का उपयोग कर सकते हैं।


2

V2.0 से कई उपयोगकर्ता पथ का उपयोग कर रहे हैं, लेकिन हम या तो पथ या url का उपयोग कर सकते हैं। उदाहरण के लिए django में 2.1.1 यूआरएल के माध्यम से कार्यों के लिए मैपिंग निम्नानुसार की जा सकती है

from django.contrib import admin
from django.urls import path

from django.contrib.auth import login
from posts.views import post_home
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^posts/$', post_home, name='post_home'),

]

जहाँ पोस्ट एक एप्लिकेशन है और पोस्ट_होम व्यू-थ्रू में एक फ़ंक्शन है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.