Django 2.1 - django.urls utility functions

django.urls उपयोगिता कार्य




django

django.urls उपयोगिता कार्य

reverse()

यदि आपको अपने कोड में url टेम्पलेट टैग के समान कुछ का उपयोग करने की आवश्यकता है, तो Django निम्नलिखित फ़ंक्शन प्रदान करता है:

reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None) [source]

viewname एक URL पैटर्न नाम या viewname करने योग्य दृश्य ऑब्जेक्ट हो सकता है। उदाहरण के लिए, निम्नलिखित url दिया गया है:

from news import views

path('archive/', views.archive, name='news-archive')

आप URL को उलटने के लिए निम्न में से किसी का भी उपयोग कर सकते हैं:

# using the named URL
reverse('news-archive')

# passing a callable object
# (This is discouraged because you can't reverse namespaced views this way.)
from news import views
reverse(views.archive)

यदि URL तर्कों को स्वीकार करता है, तो आप उन्हें args में पास कर सकते हैं। उदाहरण के लिए:

from django.urls import reverse

def myview(request):
    return HttpResponseRedirect(reverse('arch-summary', args=[1945]))

आप args बजाय kwargs भी पास कर सकते हैं। उदाहरण के लिए:

>>> reverse('admin:app_list', kwargs={'app_label': 'auth'})
'/admin/auth/'

args और kwargs को एक ही समय में reverse() में पारित नहीं किया जा सकता है।

यदि कोई मिलान नहीं किया जा सकता है, तो reverse() एक NoReverseMatch अपवाद उठाता है।

reverse() फ़ंक्शन URL के लिए नियमित अभिव्यक्ति पैटर्न की एक बड़ी विविधता को उलट सकता है, लेकिन हर संभव एक नहीं। फिलहाल मुख्य प्रतिबंध यह है कि पैटर्न में ऊर्ध्वाधर बार ( "|" ) वर्ण का उपयोग करके वैकल्पिक विकल्प नहीं हो सकते हैं। आप आने वाले यूआरएल के खिलाफ मिलान करने और उन्हें विचारों को भेजने के लिए इस तरह के पैटर्न का उपयोग कर सकते हैं, लेकिन आप ऐसे पैटर्न को उलट नहीं सकते।

current_app तर्क आपको रिसॉल्वर को एक संकेत प्रदान करने की अनुमति देता है जो उस एप्लिकेशन को दर्शाता है जिसमें वर्तमान में निष्पादित दृश्य संबंधित है। इस current_app तर्क का उपयोग नामस्थान रिज़ॉल्यूशन रणनीति के अनुसार विशिष्ट एप्लिकेशन इंस्टेंस पर URL में एप्लिकेशन नामस्थान को हल करने के लिए संकेत के रूप में किया जाता है।

urlconf तर्क URLconf मॉड्यूल है जिसमें URL पैटर्न का उपयोग किया जाता है जो उलटने के लिए उपयोग होता है। डिफ़ॉल्ट रूप से, वर्तमान थ्रेड के लिए रूट URLconf का उपयोग किया जाता है।

ध्यान दें

reverse() द्वारा लौटाए गए तार पहले से ही urlquoted । उदाहरण के लिए:

>>> reverse('cities', args=['Orléans'])
'.../Orl%C3%A9ans/'

आगे एन्कोडिंग (जैसे कि urllib.parse.quote() ) को reverse() के आउटपुट में लागू करना अवांछनीय परिणाम पैदा कर सकता है।

reverse_lazy()

reverse() एक आलसी मूल्यांकन संस्करण reverse()

reverse_lazy(viewname, urlconf=None, args=None, kwargs=None, current_app=None)

जब आप अपने प्रोजेक्ट के URLConf को लोड करते हैं, तो आपको URL उलटने का उपयोग करने की आवश्यकता होती है। कुछ सामान्य मामले जहां यह कार्य आवश्यक है:

  • एक सामान्य श्रेणी-आधारित दृश्य के url विशेषता के रूप में एक उल्टा URL प्रदान करना।
  • एक डेकोरेटर (जैसे कि django.contrib.auth.decorators.permission_required() डेकोरेटर के लिए एक उलटा URL प्रदान करना)।
  • फ़ंक्शन के हस्ताक्षर में पैरामीटर के लिए डिफ़ॉल्ट मान के रूप में एक उल्टा URL प्रदान करना।

resolve()

resolve() फ़ंक्शन का उपयोग URL पथों को संबंधित दृश्य फ़ंक्शन के समाधान के लिए किया जा सकता है। इसके निम्नलिखित हस्ताक्षर हैं:

resolve(path, urlconf=None) [source]

path वह URL पथ है जिसे आप हल करना चाहते हैं। reverse() , आपको urlconf पैरामीटर के बारे में चिंता करने की आवश्यकता नहीं है। फ़ंक्शन एक ResolverMatch ऑब्जेक्ट देता है जो आपको हल किए गए URL के बारे में विभिन्न मेटाडेटा तक पहुंचने की अनुमति देता है।

यदि URL हल नहीं करता है, तो फ़ंक्शन एक Http404 अपवाद ( Http404 का एक उपवर्ग) Http404

class ResolverMatch [source]
func

URL को देखने के लिए उपयोग किया जाने वाला दृश्य फ़ंक्शन

args

URL से पार्स किए गए व्यू फ़ंक्शन को तर्क दिए जाएंगे।

kwargs

URL से पार्स किए गए कीवर्ड तर्क को व्यू फ़ंक्शन में पास किया जाएगा।

url_name

URL से मेल खाने वाले URL पैटर्न का नाम।

app_name

URL से मेल खाने वाले URL पैटर्न के लिए एप्लिकेशन नेमस्पेस।

app_names

URL से मेल खाने वाले URL पैटर्न के लिए पूर्ण एप्लिकेशन नामस्थान में अलग-अलग नामस्थान घटकों की सूची। उदाहरण के लिए, यदि app_name 'foo:bar' , तो app_names ['foo', 'bar']

namespace

URL से मेल खाने वाले URL पैटर्न के लिए नाम नामस्थान।

namespaces

URL से मेल खाने वाले URL पैटर्न के लिए पूर्ण नाम नामस्थान में अलग-अलग नामस्थान घटकों की सूची। यानी, अगर नामस्थान foo:bar , तो नामस्थान ['foo', 'bar']

view_name

यदि URL एक है तो नामस्थान से मेल खाने वाले दृश्य का नाम।

एक URL से मेल खाने वाले URL पैटर्न के बारे में जानकारी देने के लिए एक ResolverMatch ऑब्जेक्ट से पूछताछ की जा सकती है:

# Resolve a URL
match = resolve('/some/path/')
# Print the URL pattern that matches the URL
print(match.url_name)

एक ResolverMatch ऑब्जेक्ट को एक ट्रिपल को भी सौंपा जा सकता है:

func, args, kwargs = resolve('/some/path/')

Http404 एक संभावित उपयोग resolve() यह जांचने के लिए होगा कि क्या पुनर्निर्देशन से पहले एक Http404 त्रुटि Http404 :

from urllib.parse import urlparse
from django.urls import resolve
from django.http import Http404, HttpResponseRedirect

def myview(request):
    next = request.META.get('HTTP_REFERER', None) or '/'
    response = HttpResponseRedirect(next)

    # modify the request and response as required, e.g. change locale
    # and set corresponding locale cookie

    view, args, kwargs = resolve(urlparse(next)[2])
    kwargs['request'] = request
    try:
        view(*args, **kwargs)
    except Http404:
        return HttpResponseRedirect('/')
    return response

get_script_prefix()

get_script_prefix() [source]

आम तौर पर, आपको अपने आवेदन में URL को परिभाषित करने के लिए हमेशा reverse() का उपयोग करना चाहिए। हालाँकि, यदि आपका एप्लिकेशन URL पदानुक्रम के भाग का निर्माण करता है, तो आपको कभी-कभी URL जनरेट करने की आवश्यकता हो सकती है। उस स्थिति में, आपको अपने वेब सर्वर के भीतर Django परियोजना का आधार URL खोजने में सक्षम होना चाहिए (सामान्य रूप से, reverse() आपके लिए यह ध्यान रखता है)। उस स्थिति में, आप get_script_prefix() को कॉल कर सकते हैं, जो आपके get_script_prefix() प्रोजेक्ट के लिए URL के स्क्रिप्ट उपसर्ग भाग को वापस कर देगा। यदि आपका Django प्रोजेक्ट अपने वेब सर्वर की जड़ में है, तो यह हमेशा "/"