Django 2.1 - Django Utils

Django के बर्तन




django

Django के बर्तन

इस दस्तावेज़ में django.utils सभी स्थिर मॉड्यूल शामिल हैं। django.utils में अधिकांश मॉड्यूल आंतरिक उपयोग के लिए डिज़ाइन किए गए हैं और केवल निम्नलिखित भागों को स्थिर माना जा सकता है और इस प्रकार आंतरिक रिलीज अपव्यय नीति के अनुसार पीछे की ओर संगत किया जा सकता है।

django.utils.cache

इस मॉड्यूल में कैशिंग को नियंत्रित करने के लिए सहायक कार्य शामिल हैं। यह प्रतिक्रियाओं के Vary हेडर का प्रबंधन करके ऐसा करता है। इसमें प्रतिक्रिया वस्तुओं के हेडर को सीधे पैच करने के लिए फ़ंक्शंस शामिल हैं और डेकोरेटर जो उस हेडर-पैचिंग को स्वयं करने के लिए फ़ंक्शंस बदलते हैं।

Vary हेडर की जानकारी के लिए, RFC 7231 # सेक्शन-7.1.4 देखें

अनिवार्य रूप से, Vary एचटीटीपी हेडर परिभाषित करता है कि कैशे की कुंजी बनाते समय कैशे को ध्यान में रखना चाहिए। Vary नाम के हेडर के लिए एक ही पथ लेकिन अलग हेडर कंटेंट के साथ अनुरोध करने से गलत कंटेंट की डिलीवरी को रोकने के लिए अलग-अलग कैश कीज़ प्राप्त करने की आवश्यकता होती है।

उदाहरण के लिए, internationalization मिडलवेयर को Accept-language हेडर द्वारा कैश को अलग करना होगा।

patch_cache_control(response, **kwargs) [source]

यह फ़ंक्शन सभी कीवर्ड तर्कों को जोड़कर Cache-Control हेडर को पैच करता है। परिवर्तन इस प्रकार है:

  • सभी कीवर्ड पैरामीटर नाम लोअरकेस में बदल जाते हैं, और अंडरस्कोर हाइफ़न में बदल जाते हैं।
  • यदि एक पैरामीटर का मान True (बिल्कुल True , न कि केवल एक सच्चे मूल्य के लिए), तो केवल पैरामीटर नाम हेडर में जोड़ा जाता है।
  • अन्य सभी मापदंडों को उनके मूल्य के साथ जोड़ा जाता है, इसके लिए str() लागू करने के बाद।
get_max_age(response) [source]

प्रतिसाद के रूप में प्रतिक्रिया कैश-कंट्रोल हैडर से अधिकतम-आयु लौटाता है (या अगर यह नहीं मिला या पूर्णांक नहीं था)।

patch_response_headers(response, cache_timeout=None) [source]

दिए गए HttpResponse ऑब्जेक्ट में कुछ उपयोगी हेडर जोड़ता है:

  • Expires
  • Cache-Control

प्रत्येक हेडर केवल तभी जोड़ा जाता है जब वह पहले से सेट न हो।

cache_timeout सेकंड में है। CACHE_MIDDLEWARE_SECONDS सेटिंग डिफ़ॉल्ट रूप से उपयोग की जाती है।

add_never_cache_headers(response) [source]

एक Cache-Control: max-age=0, no-cache, no-store, must-revalidate जोड़ता है Cache-Control: max-age=0, no-cache, no-store, must-revalidate एक प्रतिक्रिया के लिए हेडर को फिर Cache-Control: max-age=0, no-cache, no-store, must-revalidate ताकि यह इंगित किया जा सके कि पृष्ठ को कभी भी कैश नहीं किया जाना चाहिए।

patch_vary_headers(response, newheaders) [source]

दिए गए HttpResponse ऑब्जेक्ट में Vary हैडर जोड़ता है (या अपडेट करता है)। newheaders हैडर नामों की एक सूची है जो Vary में होनी चाहिए। Vary में मौजूदा हेडर को हटाया नहीं गया है।

get_cache_key(request, key_prefix=None) [source]

अनुरोध पथ के आधार पर कैश कुंजी लौटाता है। यह अनुरोध चरण में उपयोग किया जा सकता है क्योंकि यह हेडर की सूची को वैश्विक पथ रजिस्ट्री से ध्यान में रखता है और उन का उपयोग करता है जिनके खिलाफ चेक करने के लिए कैश कुंजी का निर्माण होता है।

यदि कोई हेडरलिस्ट संग्रहीत नहीं है, तो पृष्ठ को फिर से बनाने की आवश्यकता है, इसलिए यह फ़ंक्शन None लौटाता है।

learn_cache_key(request, response, cache_timeout=None, key_prefix=None) [source]

जानें कि हेडर प्रतिक्रिया ऑब्जेक्ट से कुछ अनुरोध पथ के लिए क्या ध्यान में रखते हैं। यह उन हेडर को एक वैश्विक पथ रजिस्ट्री में संग्रहीत करता है ताकि बाद में उस पथ तक पहुंच पता चल सके कि प्रतिक्रिया ऑब्जेक्ट का निर्माण किए बिना हेडर को क्या ध्यान रखना चाहिए। शीर्षकों को प्रतिक्रिया के Vary हेडर में नामित किया गया है, लेकिन हम प्रतिक्रिया पीढ़ी को रोकना चाहते हैं।

कैश प्रमुख पीढ़ी के लिए उपयोग करने के लिए शीर्ष लेखों की सूची को उसी कैश में संग्रहीत किया जाता है जो स्वयं पृष्ठों में होता है। यदि कैश कुछ डेटा को कैश से बाहर कर देता है, तो इसका मतलब है कि हमें कैश हेडर का उपयोग करने के लिए वैरी हेडर और इसलिए हेडर की सूची में प्राप्त करने के लिए एक बार प्रतिक्रिया का निर्माण करना होगा।

django.utils.dateparse

इस मॉड्यूल में परिभाषित कार्य निम्नलिखित गुण साझा करते हैं:

  • यदि उनका इनपुट अच्छी तरह से स्वरूपित है, तो वे ValueError बढ़ाते हैं, लेकिन एक मान्य दिनांक या समय नहीं है।
  • अगर यह अच्छी तरह से स्वरूपित None तो वे None लौटाते हैं।
  • वे इनपुट में पिकोसॉकोंड रिज़ॉल्यूशन तक स्वीकार करते हैं, लेकिन वे इसे माइक्रोसेकंड में बदल देते हैं, क्योंकि यह पायथन का समर्थन करता है।
parse_date(value) [source]

एक स्ट्रिंग पार्स करता है और एक datetime.date देता है।

parse_time(value) [source]

एक स्ट्रिंग पार्स करता है और एक datetime.time देता है।

UTC ऑफ़सेट समर्थित नहीं हैं; यदि value एक का वर्णन करता है, तो परिणाम None

parse_datetime(value) [source]

एक स्ट्रिंग पार्स करता है और एक datetime.datetime लौटाता है।

यूटीसी ऑफ़सेट समर्थित हैं; यदि value एक का वर्णन करता है, तो परिणाम का tzinfo विशेषता एक FixedOffset उदाहरण है।

parse_duration(value) [source]

एक स्ट्रिंग पार्स करता है और एक datetime.timedelta देता है।

"DD HH:MM:SS.uuuuuu" या ISO 8601 (जैसे P4DT1H15M20S जो 4 1:15:20 बराबर है) या PostgreSQL के दिन-समय अंतराल प्रारूप (जैसे 3 days 04:05:06 ) के प्रारूप में डेटा की P4DT1H15M20S करता है। 3 days 04:05:06 )।

Django 2.0 में बदला:

PostgreSQL के अंतराल प्रारूप के लिए समर्थन जोड़ा गया था।

django.utils.decorators

method_decorator(decorator, name='') [source]

एक समारोह डेकोरेटर को एक विधि डेकोरेटर में परिवर्तित करता है। यह तरीकों या कक्षाओं को सजाने के लिए इस्तेमाल किया जा सकता है; उत्तरार्द्ध मामले में, name को सजाने के लिए विधि का नाम है और इसकी आवश्यकता है।

decorator भी एक सूची या कार्यों का रंग हो सकता है। वे रिवर्स ऑर्डर में लिपटे हुए हैं ताकि कॉल ऑर्डर वह क्रम है जिसमें फ़ंक्शन सूची / टपल में दिखाई देते हैं।

उदाहरण के उपयोग के लिए सजा वर्ग आधारित दृश्य देखें।

decorator_from_middleware(middleware_class) [source]

एक मिडलवेयर क्लास को देखते हुए, एक डेकोरेटर देखता है। यह आपको प्रति-दृश्य आधार पर मिडिलवेयर कार्यक्षमता का उपयोग करने देता है। मिडलवेयर बनाया गया है जिसमें कोई भी पाराम नहीं है।

यह मिडिलवेयर को मानता है जो Django 1.9 की पुरानी शैली और पहले (प्रक्रिया_ process_request() , process_exception() , और process_response() ) जैसी process_request() विधियों के साथ संगत है।

decorator_from_middleware_with_args(middleware_class) [source]

decorator_from_middleware तरह, लेकिन एक फ़ंक्शन देता है जो मिडलवेयर_क्लास को दिए जाने वाले तर्कों को स्वीकार करता है। उदाहरण के लिए, cache_page() डेकोरेटर इस तरह से CacheMiddleware से बनाया गया है:

cache_page = decorator_from_middleware_with_args(CacheMiddleware)

@cache_page(3600)
def my_view(request):
    pass

django.utils.encoding

python_2_unicode_compatible() [source]

एक डेकोरेटर जो पायथन के तहत __unicode__ और __unicode__ तरीकों को परिभाषित करता है 2. पायथन 3 के तहत यह कुछ भी नहीं करता है।

एक ही कोड बेस के साथ पायथन 2 और 3 का समर्थन करने के लिए, एक six.text_type() मेथड रिटर्निंग टेक्स्ट को परिभाषित करें (यदि आप कुछ कास्टिंग कर रहे हैं तो six.text_type() उपयोग करें) और इस डेकोरेटर को कक्षा में लागू करें।

smart_text(s, encoding='utf-8', strings_only=False, errors='strict') [source]

s प्रतिनिधित्व करने वाली एक str ऑब्जेक्ट लौटाता है। encoding कोडेक का उपयोग करके बायस्ट्रेस का व्यवहार करता है।

यदि strings_only True , तो (कुछ) गैर-स्ट्रिंग जैसी वस्तुओं को परिवर्तित न करें।

is_protected_type(obj) [source]

निर्धारित करें कि वस्तु उदाहरण संरक्षित प्रकार का है या नहीं।

संरक्षित प्रकारों की वस्तुओं को संरक्षित किया जाता है, जब force_text(strings_only=True)

force_text(s, encoding='utf-8', strings_only=False, errors='strict') [source]

smart_text समान, सिवाय इसके कि आलसी उदाहरणों को आलसी वस्तुओं के रूप में रखने के बजाय, तार के लिए हल किया जाता है।

यदि strings_only True , तो (कुछ) गैर-स्ट्रिंग जैसी वस्तुओं को परिवर्तित न करें।

smart_bytes(s, encoding='utf-8', strings_only=False, errors='strict') [source]

encoding में निर्दिष्ट के रूप में एन्कोडेड, s का एक बाइटस्ट्रिंग संस्करण लौटाता है।

यदि strings_only True , तो (कुछ) गैर-स्ट्रिंग जैसी वस्तुओं को परिवर्तित न करें।

force_bytes(s, encoding='utf-8', strings_only=False, errors='strict') [source]

smart_bytes समान, सिवाय इसके कि आलसी उदाहरणों को आलसी वस्तुओं के बजाय बाइटस्ट्रेस में हल किया जाता है।

यदि strings_only True , तो (कुछ) गैर-स्ट्रिंग जैसी वस्तुओं को परिवर्तित न करें।

smart_str(s, encoding='utf-8', strings_only=False, errors='strict')

smart_text() उपनाम smart_text() । यह फ़ंक्शन एक स्ट्रिंग या एक आलसी स्ट्रिंग लौटाता है।

उदाहरण के लिए, यह sys.stdout लिखने के लिए उपयुक्त है।

smart_bytes() 2 के उपनाम smart_bytes() पायथन 2 पर (Django के पुराने संस्करणों में जो इसका समर्थन करते हैं)।

force_str(s, encoding='utf-8', strings_only=False, errors='strict')

force_text() का force_text() । यह फ़ंक्शन हमेशा एक str देता है।

पायथन 2 पर force_bytes() का उपनाम force_bytes() इसे समर्थन करने वाले Django के पुराने संस्करणों में)।

iri_to_uri(iri) [source]

एक अंतर्राष्ट्रीय संसाधन पहचानकर्ता (IRI) भाग को URI भाग में रूपांतरित करें जो URL में शामिल करने के लिए उपयुक्त है।

यह RFC 3987 # अनुभाग-3.1 के खंड 3.1 से एल्गोरिथ्म है, क्योंकि इनपुट को एक मनमाना बाइट स्ट्रीम के बजाय एक स्ट्रिंग माना जाता है।

एक IRI (स्ट्रिंग या UTF-8 बाइट्स) लेता है और एक स्ट्रिंग देता है जिसमें एन्कोडेड परिणाम होता है।

uri_to_iri(uri) [source]

एक अंतर्राष्ट्रीय संसाधन पहचानकर्ता में एक समान संसाधन पहचानकर्ता को रूपांतरित करता है।

यह RFC 3987 # सेक्शन 3.2 की धारा 3.2 से एक एल्गोरिथ्म है।

ASCII बाइट्स में एक URI लेता है और एक स्ट्रिंग देता है जिसमें एन्कोडेड परिणाम होता है।

filepath_to_uri(path) [source]

एक फ़ाइल सिस्टम पथ को एक URI भाग में कनवर्ट करें जो URL में शामिल करने के लिए उपयुक्त है। पथ को या तो UTF-8 बाइट्स या स्ट्रिंग माना जाता है।

यह विधि कुछ वर्णों को कूटबद्ध करेगी, जिन्हें आमतौर पर URI के लिए विशेष वर्ण के रूप में पहचाना जाएगा। ध्यान दें कि यह विधि 'वर्ण को एन्कोड नहीं करती है, क्योंकि यह URI के भीतर एक मान्य वर्ण है। अधिक विवरण के लिए encodeURIComponent() जावास्क्रिप्ट फ़ंक्शन देखें।

एक ASCII स्ट्रिंग देता है जिसमें एन्कोडेड परिणाम होता है।

escape_uri_path(path) [source]

यूनिफ़ॉर्म रिसोर्स आइडेंटिफ़ायर (URI) के पथ भाग से असुरक्षित वर्णों को मिटा देता है।

django.utils.feedgenerator

नमूना उपयोग:

>>> from django.utils import feedgenerator
>>> feed = feedgenerator.Rss201rev2Feed(
...     title="Poynter E-Media Tidbits",
...     link="http://www.poynter.org/column.asp?id=31",
...     description="A group Weblog by the sharpest minds in online media/journalism/publishing.",
...     language="en",
... )
>>> feed.add_item(
...     title="Hello",
...     link="http://www.holovaty.com/test/",
...     description="Testing.",
... )
>>> with open('test.rss', 'w') as fp:
...     feed.write(fp, 'utf-8')

जनरेटर के उपयोग को सरल बनाने के लिए feedgenerator.DefaultFeed उपयोग करें। feedgenerator.DefaultFeed जो वर्तमान में Rss201rev2Feed

आरएसएस के विभिन्न संस्करणों की परिभाषा के लिए, देखें: https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss

get_tag_uri(url, date) [source]

एक टैगूरी बनाता है।

https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id देखें

SyndicationFeed

class SyndicationFeed [source]

सभी सिंडिकेशन फीड के लिए बेस क्लास। उपवर्गों को लिखना () प्रदान करना चाहिए।

__init__(title, link, description, language=None, author_email=None, author_name=None, author_link=None, subtitle=None, categories=None, feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, **kwargs) [source]

मेटाडेटा के दिए गए शब्दकोश के साथ फ़ीड को आरम्भ करें, जो संपूर्ण फ़ीड पर लागू होता है।

आपके द्वारा __init__ को पास किए जाने वाले किसी भी अतिरिक्त कीवर्ड तर्क को self.feed में संग्रहीत किया self.feed

categories को छोड़कर सभी पैरामीटर स्ट्रिंग्स होने चाहिए, जो स्ट्रिंग्स का एक क्रम होना चाहिए।

add_item(title, link, description, author_email=None, author_name=None, author_link=None, pubdate=None, comments=None, unique_id=None, categories=(), item_copyright=None, ttl=None, updateddate=None, enclosures=None, **kwargs) [source]

फ़ीड के लिए एक आइटम जोड़ता है। सभी args को pubdate और updateddate को छोड़कर स्ट्रिंग्स होने की उम्मीद है, जो कि datetime.datetime ऑब्जेक्ट्स, और enclosures , जो Enclosure इंस्टेंस की एक सूची है।

num_items() [source]
root_attributes() [source]

रूट (यानी फ़ीड / चैनल) तत्व पर रखने के लिए अतिरिक्त विशेषताएँ लौटाएँ। write() से पुकारा गया write()

add_root_elements(handler) [source]

मूल (यानी फ़ीड / चैनल) तत्व में तत्व जोड़ें। write() से पुकारा गया write()

item_attributes(item) [source]

प्रत्येक आइटम (अर्थात आइटम / प्रविष्टि) तत्व पर रखने के लिए अतिरिक्त विशेषताएँ लौटाएँ।

add_item_elements(handler, item) [source]

प्रत्येक आइटम (यानी आइटम / प्रविष्टि) तत्व पर तत्व जोड़ें।

write(outfile, encoding) [source]

आउटफिट को दिए गए एन्कोडिंग में फ़ीड को आउटपुट करता है, जो एक फ़ाइल जैसी वस्तु है। उपवर्गों को इसे ओवरराइड करना चाहिए।

writeString(encoding) [source]

स्ट्रिंग के रूप में दिए गए एन्कोडिंग में फ़ीड लौटाता है।

latest_post_date() [source]

फ़ीड में सभी मदों के लिए नवीनतम pubdate या updateddate लौटाता है। यदि कोई आइटम इन विशेषताओं में से कोई नहीं है, तो यह वर्तमान UTC दिनांक / समय लौटाता है।

Enclosure

class Enclosure [source]

RSS के बाड़े का प्रतिनिधित्व करता है

RssFeed

class RssFeed(SyndicationFeed) [source]

Rss201rev2Feed

class Rss201rev2Feed(RssFeed) [source]

कल्पना: https://cyber.harvard.edu/rss/rss.html

RssUserland091Feed

class RssUserland091Feed(RssFeed) [source]

युक्ति: http://backend.userland.com/rss091

Atom1Feed

class Atom1Feed(SyndicationFeed) [source]

कल्पना: https://tools.ietf.org/html/rfc4287

django.utils.functional

class cached_property(func, name=None) [source]

@cached_property डेकोरेटर एक विधि के परिणाम को संपत्ति के रूप में एकल self तर्क के साथ कैश करता है। कैश्ड रिजल्ट तब तक जारी रहेगा जब तक कि इंसर्ट नहीं हो जाता है, इसलिए यदि इंस्टेंस इधर-उधर हो जाता है और फंक्शन बाद में आ जाता है, कैश्ड रिजल्ट वापस आ जाएगा।

एक विशिष्ट मामले पर विचार करें, जहां एक मॉडल को कुछ कम्प्यूटेशन करने के लिए मॉडल की विधि को कॉल करने की आवश्यकता हो सकती है, मॉडल के उदाहरण को संदर्भ में रखने से पहले, जहां टेम्पलेट एक बार फिर विधि को लागू कर सकता है:

# the model
class Person(models.Model):

    def friends(self):
        # expensive computation
        ...
        return friends

# in the view:
if person.friends():
    ...

और टेम्पलेट में आपके पास होगा:

{% for friend in person.friends %}

यहां, friends() को दो बार बुलाया जाएगा। चूंकि दृश्य और टेम्पलेट में उदाहरण person एक ही है, friends() सजाने friends() विधि @cached_property साथ से बचने के लिए कर सकते हैं:

from django.utils.functional import cached_property

class Person(models.Model):

    @cached_property
    def friends(self):
        ...

ध्यान दें कि विधि अब एक संपत्ति है, पायथन कोड में इसे उचित रूप से लागू करने की आवश्यकता होगी:

# in the view:
if person.friends:
    ...

कैश्ड मान को उदाहरण की एक सामान्य विशेषता की तरह माना जा सकता है:

# clear it, requiring re-computation next time it's called
del person.friends # or delattr(person, "friends")

# set a value manually, that will persist on the instance until cleared
person.friends = ["Huckleberry Finn", "Tom Sawyer"]

संभावित प्रदर्शन लाभ प्रदान करने के साथ ही, @cached_property यह सुनिश्चित कर सकती है कि किसी विशेषता का मान किसी उदाहरण के जीवन में अप्रत्याशित रूप से परिवर्तित न हो। यह एक ऐसी विधि के साथ हो सकता है जिसकी गणना datetime.now() पर आधारित है, या बस अगर किसी परिवर्तन को डेटाबेस में कुछ अन्य प्रक्रिया द्वारा संक्षिप्त रूप में उसी विधि पर बाद के इनवोकेशन के बीच संक्षिप्त अंतराल में सहेजा गया था।

आप अन्य विधियों के कैश्ड गुणों को बनाने के लिए name तर्क का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आपके पास एक महंगा get_friends() विधि है और कैश्ड मान को पुनर्प्राप्त किए बिना इसे कॉल करने की अनुमति देना चाहता था, तो आप इसे देख सकते हैं:

friends = cached_property(get_friends, name='friends')

जबकि person.get_friends() प्रत्येक कॉल पर दोस्तों को पुनः प्राप्त करेगा, कैश की गई संपत्ति का मूल्य तब तक जारी रहेगा जब तक आप इसे ऊपर वर्णित अनुसार हटा नहीं देते:

x = person.friends         # calls first time
y = person.get_friends()   # calls again
z = person.friends         # does not call
x is z                     # is True

चेतावनी

जब तक यह फॉर्म का name पारित नहीं किया जाता है, तब तक _Class__attribute एक _Class__attribute name के साथ ठीक से काम नहीं करता है:

__friends = cached_property(get_friends, name='_Person__friends')
keep_lazy(func, *resultclasses) [source]

Django कई उपयोगिता फ़ंक्शंस प्रदान करता है (विशेष रूप से django.utils ) जो अपने पहले तर्क के रूप में एक स्ट्रिंग लेते हैं और उस स्ट्रिंग के लिए कुछ करते हैं। ये फ़ंक्शन टेम्प्लेट फ़िल्टर के साथ-साथ सीधे अन्य कोड में भी उपयोग किए जाते हैं।

यदि आप अपने स्वयं के समान कार्य लिखते हैं और अनुवादों से निपटते हैं, तो आपको समस्या का सामना करना पड़ेगा जब पहला तर्क एक आलसी अनुवाद वस्तु है। आप इसे तुरंत स्ट्रिंग में बदलना नहीं चाहते हैं, क्योंकि आप इस फ़ंक्शन का उपयोग किसी दृश्य के बाहर कर सकते हैं (और इसलिए वर्तमान थ्रेड की लोकेल सेटिंग सही नहीं होगी)।

इस तरह के मामलों के लिए, django.utils.functional.keep_lazy() डेकोरेटर का उपयोग करें। यह फ़ंक्शन को संशोधित करता है ताकि यदि इसे इसके किसी तर्क के रूप में एक आलसी अनुवाद के साथ कहा जाए, तो फ़ंक्शन मूल्यांकन में देरी हो जाती है जब तक कि इसे एक स्ट्रिंग में बदलने की आवश्यकता नहीं होती है।

उदाहरण के लिए:

from django.utils.functional import keep_lazy, keep_lazy_text

def fancy_utility_function(s, ...):
    # Do some conversion on string 's'
    ...
fancy_utility_function = keep_lazy(str)(fancy_utility_function)

# Or more succinctly:
@keep_lazy(str)
def fancy_utility_function(s, ...):
    ...

keep_lazy() डेकोरेटर कई प्रकार के अतिरिक्त तर्क ( *args ) लेता है, जो इस प्रकार (ओं) को निर्दिष्ट करता है कि मूल फ़ंक्शन वापस आ सकता है। एक सामान्य उपयोग के मामले में फ़ंक्शंस होते हैं जो पाठ को वापस करते हैं। इन के लिए, आप बस रखने के लिए str प्रकार पास कर सकते हैं (या यहां तक ​​कि सरल, अगले अनुभाग में वर्णित keep_lazy_text() डेकोरेटर का उपयोग करें)।

इस डेकोरेटर का उपयोग करने का मतलब है कि आप अपने कार्य को लिख सकते हैं और मान सकते हैं कि इनपुट एक उचित स्ट्रिंग है, फिर अंत में आलसी अनुवाद वस्तुओं के लिए समर्थन जोड़ें।

keep_lazy_text(func) [source]

keep_lazy(str)(func) लिए एक शॉर्टकट।

यदि आपके पास एक फ़ंक्शन है जो पाठ लौटाता है और आप उनके मूल्यांकन में देरी करते हुए आलसी तर्क लेने में सक्षम होना चाहते हैं, तो बस इस सजावट का उपयोग करें:

from django.utils.functional import keep_lazy, keep_lazy_text

# Our previous example was:
@keep_lazy(str)
def fancy_utility_function(s, ...):
    ...

# Which can be rewritten as:
@keep_lazy_text
def fancy_utility_function(s, ...):
    ...

django.utils.html

आमतौर पर आपको django.utils.safestring जहां उपयुक्त हो, में उपयोगिताओं का उपयोग करके अपने ऑटोटस्केप तंत्र का उपयोग करने के लिए Django के टेम्पलेट्स का उपयोग करके HTML का निर्माण करना चाहिए। यह मॉड्यूल HTML से बचने के लिए कुछ अतिरिक्त निम्न स्तर की सुविधाएं प्रदान करता है।

escape(text) [source]

HTML में उपयोग के लिए एन्कोड किए गए ampersands, उद्धरण और कोण कोष्ठक के साथ दिए गए पाठ को वापस करता है। इनपुट पहले एक स्ट्रिंग के लिए coerced है और आउटपुट में mark_safe() लागू है।

conditional_escape(text) [source]

escape() समान escape() , सिवाय इसके कि यह पहले से बच गए तारों पर काम नहीं करता है, इसलिए यह दोहरा बच नहीं पाएगा।

format_html(format_string, *args, **kwargs) [source]

यह str.format() समान है, सिवाय इसके कि यह HTML अंशों के निर्माण के लिए उपयुक्त है। सभी args और kwargs str.format() पारित होने से पहले str.format() माध्यम से पारित किए जाते conditional_escape()

छोटे HTML अंशों के निर्माण के मामले में, यह फ़ंक्शन % या str.format() का उपयोग करके स्ट्रिंग प्रक्षेप से अधिक पसंद किया जाना है, क्योंकि यह सभी तर्कों पर भागने को लागू करता है - ठीक उसी तरह जैसे कि टेम्पलेट सिस्टम डिफ़ॉल्ट रूप से भागने से लागू होता है।

इसलिए, लिखने के बजाय:

mark_safe("%s <b>%s</b> %s" % (
    some_html,
    escape(some_text),
    escape(some_other_text),
))

आपको इसके बजाय उपयोग करना चाहिए:

format_html("{} <b>{}</b> {}",
    mark_safe(some_html),
    some_text,
    some_other_text,
)

इसका लाभ यह है कि आपको प्रत्येक तर्क से escape() को लागू करने की आवश्यकता नहीं है और यदि आप एक भूल जाते हैं तो बग और XSS भेद्यता का जोखिम उठा सकते हैं।

ध्यान दें कि हालांकि यह फ़ंक्शन str.format() का उपयोग करता है प्रक्षेप करने के लिए, str.format() (जैसे संख्या स्वरूपण) द्वारा प्रदान किए गए कुछ स्वरूपण विकल्प काम नहीं करेंगे, क्योंकि सभी तर्क str.format() माध्यम से पारित किए जाते conditional_escape() जो अंततः) मूल्यों पर force_text() कॉल करता है।

format_html_join(sep, format_string, args_generator) [source]

तर्कों के समूह के सामान्य मामले के लिए format_html() का एक आवरण, जिसे समान प्रारूप स्ट्रिंग का उपयोग करके स्वरूपित करने की आवश्यकता होती है, और फिर sep का उपयोग करके शामिल हो जाता है। sep को sep conditional_escape() से भी गुजारा जाता है।

args_generator एक args_generator होना चाहिए जो args के अनुक्रम को लौटाता है जिसे format_html() पास किया जाएगा। उदाहरण के लिए:

format_html_join(
    '\n', "<li>{} {}</li>",
    ((u.first_name, u.last_name) for u in users)
)
strip_tags(value) [source]

स्ट्रिंग से एक HTML टैग की तरह दिखने वाली किसी भी चीज़ को हटाने की कोशिश करता है, जो कि कुछ भी <>

परिणामी स्ट्रिंग HTML सुरक्षित होने के बारे में बिल्कुल कोई गारंटी नहीं दी गई है। तो पहले से बचने के बिना एक strip_tag कॉल का परिणाम सुरक्षित strip_tag , उदाहरण के लिए escape()

उदाहरण के लिए:

strip_tags(value)

यदि value "<b>Joel</b> <button>is</button> a <span>slug</span>" वापसी मूल्य होगा "Joel is a slug"

यदि आप अधिक मजबूत समाधान की तलाश कर रहे हैं, तो bleach पायथन पुस्तकालय पर एक नज़र डालें।

html_safe() [source]

एक वर्ग पर __html__() विधि गैर-Django टेम्प्लेट को उन वर्गों का पता लगाने में मदद करती है जिनके आउटपुट को HTML भागने की आवश्यकता नहीं होती है।

यह डेकोरेटर, __html__() विधि को परिभाषित वर्ग पर __str__() से mark_safe() में लपेटकर परिभाषित करता है। सुनिश्चित करें कि __str__() विधि वास्तव में वह पाठ __str__() जिसमें HTML भागने की आवश्यकता नहीं होती है।

django.utils.http

urlencode(query, doseq=False) [source]

पायथन के urllib.parse.urlencode() फ़ंक्शन का एक संस्करण जो MultiValueDict और गैर-स्ट्रिंग मानों पर काम कर सकता है।

cookie_date(epoch_seconds=None) [source]

संस्करण 2.1 के बाद से पदावनत: इसके बजाय http_date() उपयोग करें, जो नवीनतम RFC का अनुसरण करता है।

नेटस्केप के कुकी मानक के साथ संगतता सुनिश्चित करने का समय निर्धारित करता है।

UTC में युग के बाद से सेकंड में व्यक्त फ्लोटिंग पॉइंट संख्या को स्वीकार करता है - जैसे कि time.time() द्वारा time.time() किया गया। यदि किसी के लिए सेट None , तो मौजूदा समय में चूक।

आउटपुट स्वरूप में एक स्ट्रिंग Wdy, DD-Mon-YYYY HH:MM:SS GMT

http_date(epoch_seconds=None) [source]

HTTP RFC 7231 # अनुभाग-7.1.1.1 द्वारा निर्दिष्ट RFC 1123 दिनांक प्रारूप से मिलान करने का समय।

UTC में युग के बाद से सेकंड में व्यक्त फ्लोटिंग पॉइंट संख्या को स्वीकार करता है - जैसे कि time.time() द्वारा time.time() किया गया। यदि किसी के लिए सेट None , तो मौजूदा समय में चूक।

आउटपुट स्वरूप में एक स्ट्रिंग Wdy, DD Mon YYYY HH:MM:SS GMT

base36_to_int(s) [source]

एक बेस 36 स्ट्रिंग को पूर्णांक में परिवर्तित करता है।

int_to_base36(i) [source]

एक धनात्मक पूर्णांक को आधार 36 स्ट्रिंग में परिवर्तित करता है।

urlsafe_base64_encode(s) [source]

किसी भी अनुगामी समान संकेतों को अलग करते हुए URL में उपयोग के लिए base64 में एक बाइटस्ट्रिंग को एनकोड करता है।

urlsafe_base64_decode(s) [source] urlsafe_base64_decode(s) [source]

एक बेस 64 एनकोडेड स्ट्रिंग को डिकोड करता है, जो पीछे छोड़े गए समान संकेतों को जोड़ता है जो छीन लिए गए हो सकते हैं।

django.utils.module_loading

पायथन मॉड्यूल के साथ काम करने के लिए कार्य।

import_string(dotted_path) [source]

एक बिंदीदार मॉड्यूल पथ का आयात करता है और पथ में अंतिम नाम द्वारा निर्दिष्ट विशेषता / वर्ग देता है। यदि आयात विफल हुआ तो ImportError उठाता है। उदाहरण के लिए:

from django.utils.module_loading import import_string
ValidationError = import_string('django.core.exceptions.ValidationError')

के बराबर है:

from django.core.exceptions import ValidationError

django.utils.safestring

"सुरक्षित तार" के साथ काम करने के लिए फ़ंक्शंस और कक्षाएं: वे तार जिन्हें HTML में आगे भागने के बिना सुरक्षित रूप से प्रदर्शित किया जा सकता है। किसी चीज़ को "सुरक्षित स्ट्रिंग" के रूप में चिह्नित करने का मतलब है कि स्ट्रिंग के निर्माता ने पहले से ही पात्रों को बदल दिया है जो कि एचटीएमएल इंजन (जैसे '<') की व्याख्या उचित संस्थाओं में नहीं की जानी चाहिए।

class SafeString

HTML उत्पादन उद्देश्यों के लिए एक विशिष्ट उपवर्ग जिसे विशेष रूप से "सुरक्षित" (आगे भागने की आवश्यकता नहीं) के रूप में चिह्नित किया गया है। SafeText उपनाम।

class SafeText [source]

एक str उपवर्ग जो विशेष रूप से HTML आउटपुट उद्देश्यों के लिए "सुरक्षित" के रूप में चिह्नित किया गया है।

mark_safe(s) [source]

स्पष्ट रूप से (HTML) आउटपुट उद्देश्यों के लिए एक स्ट्रिंग को सुरक्षित रूप से चिह्नित करें। लौटी हुई वस्तु का उपयोग हर जगह किया जा सकता है, एक स्ट्रिंग उपयुक्त है।

एक तार पर कई बार कहा जा सकता है।

डेकोरेटर के रूप में भी इस्तेमाल किया जा सकता है।

HTML के टुकड़े बनाने के लिए, आपको सामान्यतः format_html() बजाय का उपयोग करना चाहिए।

स्ट्रिंग सुरक्षित चिह्नित संशोधित होने पर फिर से असुरक्षित हो जाएगा। उदाहरण के लिए:

>>> mystr = '<b>Hello World</b>   '
>>> mystr = mark_safe(mystr)
>>> type(mystr)
<class 'django.utils.safestring.SafeText'>

>>> mystr = mystr.strip()  # removing whitespace
>>> type(mystr)
<type 'str'>

django.utils.text

format_lazy(format_string, *args, **kwargs)

str.format() , args , और / या kwargs लिए str.format() का एक संस्करण आलसी ऑब्जेक्ट होता है। पहला तर्क स्वरूपित होने के लिए स्ट्रिंग है। उदाहरण के लिए:

from django.utils.text import format_lazy
from django.utils.translation import pgettext_lazy

urlpatterns = [
    path(format_lazy('{person}/<int:pk>/', person=pgettext_lazy('URL', 'person')),
         PersonDetailView.as_view()),
]

यह उदाहरण अनुवादकों को URL के भाग का अनुवाद करने की अनुमति देता है। यदि "व्यक्ति" का अनुवाद "व्यक्तित्व" के लिए किया जाता है, तो नियमित अभिव्यक्ति persona/(?P<pk>\d+)/$ , जैसे persona/5/ से मेल खाएगी।

slugify(allow_unicode=False) [source]

ASCII में कनवर्ट करता है अगर allow_unicode False (डिफ़ॉल्ट) है। रिक्त स्थान को हाइफ़न में परिवर्तित करता है। उन वर्णों को हटा देता है जो अल्फ़ान्यूमेरिक्स, अंडरस्कोर या हाइफ़न नहीं हैं। लोअरकेस में कनवर्ट करता है। इसके अलावा व्हाईटस्पेस अग्रणी और अनुगामी।

उदाहरण के लिए:

slugify(value)

यदि value "Joel is a slug" , तो आउटपुट "joel-is-a-slug"

यदि आप यूनिकोड वर्णों की अनुमति देना चाहते हैं, तो आप allow_unicode पैरामीटर को True सेट कर सकते हैं:

slugify(value, allow_unicode=True)

यदि value "你好 World" , तो आउटपुट "你好-world"

django.utils.timezone

utc

tzinfo उदाहरण जो UTC का प्रतिनिधित्व करता है।

class FixedOffset(offset=None, name=None) [source]

एक tzinfo उपवर्ग ने UTC से एक निश्चित ऑफसेट मॉडलिंग की। offset UTC के पूर्व में एक पूर्णांक संख्या है।

get_fixed_timezone(offset) [source]

एक tzinfo उदाहरण देता है जो UTC से निश्चित ऑफ़सेट के साथ एक समय क्षेत्र का प्रतिनिधित्व करता है।

offset एक datetime.timedelta या पूर्णांक संख्या मिनट है। यूटीसी के पूर्व के समय क्षेत्रों के लिए सकारात्मक मूल्यों और यूटीसी के पश्चिम के लिए नकारात्मक मूल्यों का उपयोग करें।

get_default_timezone() [source]

एक tzinfo उदाहरण देता है जो डिफ़ॉल्ट समय क्षेत्र का प्रतिनिधित्व करता है

get_default_timezone_name() [source]

डिफ़ॉल्ट समय क्षेत्र का नाम लौटाता है।

get_current_timezone() [source]

एक tzinfo उदाहरण देता है जो वर्तमान समय क्षेत्र का प्रतिनिधित्व करता है

get_current_timezone_name() [source]

वर्तमान समय क्षेत्र का नाम लौटाता है।

activate(timezone) [source]

वर्तमान समय क्षेत्र सेट करता है tzinfo तर्क को एक tzinfo उपवर्ग या समय क्षेत्र नाम का उदाहरण होना चाहिए।

deactivate() [source]

वर्तमान समय क्षेत्र खोल देता है।

override(timezone) [source]

यह एक पायथन संदर्भ प्रबंधक है जो activate() साथ प्रवेश पर वर्तमान समय क्षेत्र सेट करता है, और बाहर निकलने पर पहले से सक्रिय समय क्षेत्र को पुनर्स्थापित करता है। यदि timezone तर्क None , तो वर्तमान समय क्षेत्र इसके बजाय deactivate() साथ प्रवेश पर परेशान है।

फंक्शन डेकोरेटर के रूप में override भी प्रयोग करने योग्य है।

localtime(value=None, timezone=None) [source]

वर्तमान समय क्षेत्र को डिफ़ॉल्ट रूप से एक अलग टाइम ज़ोन में परिवर्तित करता है

जब value छोड़ा जाता है, तो यह now() डिफॉल्ट हो जाता है।

यह फ़ंक्शन भोले डेटासेट पर काम नहीं करता है; इसके बजाय make_aware() उपयोग करें।

localdate(value=None, timezone=None) [source]

वर्तमान समय क्षेत्र को अलग समय क्षेत्र में एक जागरूक localtime() को date() में परिवर्तित करने के लिए localtime() का उपयोग करता है।

जब value छोड़ा जाता है, तो यह now() डिफॉल्ट हो जाता है।

यह फ़ंक्शन भोले डेटासेट पर काम नहीं करता है।

now() [source]

एक datetime.datetime लौटाता है जो datetime.datetime में वर्तमान बिंदु का प्रतिनिधित्व करता है। वास्तव में जो लौटा है वह USE_TZ के मूल्य पर निर्भर करता है:

  • यदि USE_TZ False , तो यह एक naive USE_TZ (यानी संबंधित USE_TZ ) होगा जो सिस्टम के स्थानीय टाइमज़ोन में वर्तमान समय का प्रतिनिधित्व करता है।
  • यदि USE_TZ True , तो यह UTC में वर्तमान समय का प्रतिनिधित्व करने वाला एक naive USE_TZ होगा। ध्यान दें कि now() हमेशा TIME_ZONE के मूल्य की परवाह किए बिना UTC में समय लौटाएगा; आप वर्तमान समय क्षेत्र में समय प्राप्त करने के लिए localtime() समय का उपयोग कर सकते हैं।
is_aware(value) [source]

True अगर value अवगत है, तो भोला अगर यह भोला है। यह फ़ंक्शन मानता है कि value एक datetime.datetime

is_naive(value) [source]

True अगर value भोला है, तो False अगर यह जागरूक है। यह फ़ंक्शन मानता है कि value एक datetime.datetime

make_aware(value, timezone=None, is_dst=None) [source]

समय-समय पर value रूप में एक ही बिंदु का प्रतिनिधित्व करता है कि एक जागरूक datetime.datetime देता है, एक भोली datetime.datetime होने के नाते value । यदि timezone किसी के लिए सेट None , तो यह वर्तमान समय क्षेत्र में चूक करता है

यदि आप एक DST संक्रमण के दौरान value बारे में जागरूक करने का प्रयास करते हैं तो pytz.AmbiguousTimeError अपवाद उठाया जाता है, जहां एक ही समय दो बार होता है (जब DST से पुन: प्राप्त होता है)। सेट करना is_dst to True या False यह चुनने से is_dst कि क्या समय पूर्व-संक्रमण या बाद के संक्रमण के बाद क्रमशः है।

यदि आप किसी DST संक्रमण के दौरान value अवगत कराने का प्रयास करते हैं तो pytz.NonExistentTimeError अपवाद को उठाया जाता है, ताकि समय कभी घटित न हो (जब डीएसटी में प्रवेश कर रहा हो)। सेटिंग is_dst to True या False को घंटे को क्रमशः 1 या पीछे की ओर ले जाकर अपवाद से बचना होगा। उदाहरण के लिए, is_dst=True , 2:30 से 1:30 तक के किसी भी समयावधि को नहीं बदलेगा और is_dst=False समय को 3:30 तक बदल देगा।

make_naive(value, timezone=None) [source]

एक भोले datetime.datetime लौटाता है जो टाइमज़ोन में एक ही बिंदु को value रूप में दर्शाता है, value एक जागरूक datetime.datetime । यदि timezone किसी के लिए सेट None , तो यह वर्तमान समय क्षेत्र में चूक करता है

django.utils.translation

निम्नलिखित के उपयोग पर पूरी चर्चा के लिए अनुवाद प्रलेखन देखें

नीचे दिए गए कार्यों पर u उपसर्ग यूनिकोड और बाइटस्ट्रेस के बीच पायथन 2 में अंतर से आता है। यदि आपका कोड पायथन 2 का समर्थन नहीं करता है, तो u बिना फ़ंक्शन का उपयोग करें।

gettext(message) [source]
ugettext(message)

message अनुवाद करता है और इसे एक स्ट्रिंग के रूप में लौटाता है।

pgettext(context, message) [source]

context दिए गए message अनुवाद करता context और इसे एक स्ट्रिंग के रूप में लौटाता है।

अधिक जानकारी के लिए, प्रासंगिक मार्कर देखें।

gettext_lazy(message)
ugettext_lazy(message)
pgettext_lazy(context, message)

ऊपर गैर-आलसी संस्करणों के रूप में भी, लेकिन आलसी निष्पादन का उपयोग करना।

आलसी अनुवाद प्रलेखन देखें।

gettext_noop(message) [source]
ugettext_noop(message)

मार्क्स अनुवाद के लिए स्ट्रिंग्स करते हैं लेकिन अब उनका अनुवाद नहीं करते हैं। इसका उपयोग वैश्विक चर में तार को संग्रहीत करने के लिए किया जा सकता है जो आधार भाषा में रहना चाहिए (क्योंकि वे बाहरी रूप से उपयोग किए जा सकते हैं) और बाद में इसका अनुवाद किया जाएगा।

ngettext(singular, plural, number) [source]
ungettext(singular, plural, number)

singular और plural अनुवाद करता singular और number आधार पर उपयुक्त स्ट्रिंग लौटाता है।

npgettext(context, singular, plural, number) [source]

singular और plural अनुवाद करता singular और number और context आधार पर उपयुक्त स्ट्रिंग लौटाता context

ngettext_lazy(singular, plural, number) [source]
ungettext_lazy(singular, plural, number)
npgettext_lazy(context, singular, plural, number) [source]

ऊपर गैर-आलसी संस्करणों के रूप में भी, लेकिन आलसी निष्पादन का उपयोग करना।

आलसी अनुवाद प्रलेखन देखें।

activate(language) [source]

किसी दिए गए भाषा के लिए अनुवाद ऑब्जेक्ट को प्राप्त करता है और इसे वर्तमान थ्रेड के लिए वर्तमान अनुवाद ऑब्जेक्ट के रूप में सक्रिय करता है।

deactivate() [source]

वर्तमान में सक्रिय अनुवाद ऑब्जेक्ट को निष्क्रिय कर देता है ताकि आगे _ कॉल डिफ़ॉल्ट अनुवाद ऑब्जेक्ट के खिलाफ फिर से हल हो जाए।

deactivate_all() [source]

सक्रिय अनुवाद ऑब्जेक्ट को NullTranslations() उदाहरण बनाता है। यह उपयोगी है जब हम विलंबित अनुवाद को किसी कारण से मूल स्ट्रिंग के रूप में प्रकट करना चाहते हैं।

override(language, deactivate=False) [source]

एक पायथन संदर्भ प्रबंधक जो किसी दिए गए भाषा के लिए अनुवाद ऑब्जेक्ट को लाने के लिए django.utils.translation.activate() का उपयोग करता है, इसे वर्तमान थ्रेड के लिए अनुवाद ऑब्जेक्ट के रूप में सक्रिय करता है और बाहर निकलने पर पिछली सक्रिय भाषा को फिर से सक्रिय करता है। वैकल्पिक रूप से, यह केवल django.utils.translation.deactivate() साथ बाहर निकलने पर अस्थायी अनुवाद को निष्क्रिय कर सकता है यदि deactivate तर्क True । यदि आप भाषा तर्क के रूप में None को None पास None करते हैं, तो संदर्भ के भीतर एक NullTranslations() उदाहरण सक्रिय होता है।

फंक्शन डेकोरेटर के रूप में override भी प्रयोग करने योग्य है।

check_for_language(lang_code) [source]

यह जाँच करता है कि क्या दिए गए भाषा कोड के लिए एक वैश्विक भाषा फ़ाइल है (उदाहरण के लिए 'fr', 'pt_BR')। इसका उपयोग यह तय करने के लिए किया जाता है कि उपयोगकर्ता द्वारा प्रदान की गई भाषा उपलब्ध है या नहीं।

get_language() [source]

वर्तमान में चयनित भाषा कोड लौटाता है। यदि None अनुवाद अस्थायी रूप से निष्क्रिय हो ( deactivate_all() या जब None override() ) पास न हो तो None लौटाता है।

get_language_bidi() [source]

चयनित भाषा का BiDi लेआउट:

  • False = बाएं से दाएं लेआउट
  • True = राइट-टू-लेफ्ट लेआउट
get_language_from_request(request, check_path=False) [source]

उपयोगकर्ता किस भाषा को दिखाना चाहता है, यह जानने के लिए अनुरोध का विश्लेषण करता है। केवल सेटिंग्स में सूचीबद्ध भाषाएं। भाषाएं ध्यान में रखी जाती हैं। यदि उपयोगकर्ता एक उप भाषा का अनुरोध करता है जहां हमारे पास एक मुख्य भाषा है, तो हम मुख्य भाषा को बाहर भेजते हैं।

यदि check_path यह है True , तो फ़ंक्शन पहले अनुरोध किए गए URL की जांच करता है कि क्या उसका पथ LANGUAGES सेटिंग में सूचीबद्ध भाषा कोड से शुरू होता है ।

get_supported_language_variant(lang_code, strict=False) [source]
Django 2.1 में नया:

रिटर्न lang_code अगर क्या है LANGUAGES की स्थापना, संभवतः एक अधिक सामान्य संस्करण का चयन। उदाहरण के लिए, 'es' अगर lang_code है 'es-ar' और 'es' है, LANGUAGES लेकिन वापस 'es-ar' नहीं आया है।

अगर strict है False (डिफ़ॉल्ट), देश-विशेष संस्करण जब न तो भाषा कोड है और न ही इसके जेनेरिक संस्करण पाया जाता है लौटाया जा सकता है। उदाहरण के लिए, यदि केवल में 'es-co' है , तो जैसे और के LANGUAGES लिए लौटा है । अगर वे मैच नहीं लौटे हैं । lang_code 'es' 'es-ar' strict=True

LookupError कुछ न मिलने पर उठाता है।

to_locale(language) [source]

एक भाषा का नाम (en-us) एक स्थानीय नाम (en_US) में बदल जाता है।

templatize(src) [source]

एक Django टेम्पलेट को उस चीज़ में बदल देता है जिसे द्वारा समझा जाता है xgettext । यह Django अनुवाद टैग को मानक gettext फ़ंक्शन इनवोकेशन में अनुवाद करके ऐसा करता है ।

LANGUAGE_SESSION_KEY

सत्र कुंजी जिसके तहत वर्तमान सत्र के लिए सक्रिय भाषा संग्रहीत है।

Original text