Django 2.1 - TemplateResponse and SimpleTemplateResponse
TemplateResponse और SimpleTemplateResponse

TemplateResponse और SimpleTemplateResponse
मानक
HttpResponse
ऑब्जेक्ट स्थिर संरचनाएँ हैं।
उन्हें निर्माण के समय पूर्व-प्रदान की गई सामग्री के एक ब्लॉक के साथ प्रदान किया जाता है, और जबकि उस सामग्री को संशोधित किया जा सकता है, यह ऐसे रूप में नहीं है जिससे संशोधनों को करना आसान हो।
हालाँकि, यह कभी-कभी सज्जाकार या मिडलवेयर को दृश्य द्वारा निर्मित होने के बाद प्रतिक्रिया को संशोधित करने की अनुमति देने के लिए फायदेमंद हो सकता है। उदाहरण के लिए, आप उपयोग किए जाने वाले टेम्पलेट को बदल सकते हैं, या संदर्भ में अतिरिक्त डेटा डाल सकते हैं।
TemplateResponse ऐसा करने का एक तरीका प्रदान करता है।
मूल
HttpResponse
ऑब्जेक्ट्स के विपरीत, TemplateResponse ऑब्जेक्ट्स उस टेम्पलेट और संदर्भ के विवरण को बनाए रखते हैं जो प्रतिक्रिया की गणना करने के लिए दृश्य द्वारा प्रदान किया गया था।
प्रतिक्रिया की अंतिम आउटपुट की गणना तब तक नहीं की जाती है जब तक कि जरूरत न हो, बाद में प्रतिक्रिया प्रक्रिया में।
SimpleTemplateResponse
ऑब्जेक्ट्स
-
class SimpleTemplateResponse
[source]
गुण
-
SimpleTemplateResponse.template_name
-
प्रदान किए जाने वाले टेम्पलेट का नाम। एक बैकएंड-निर्भर टेम्पलेट ऑब्जेक्ट (जैसे
get_template()
), टेम्पलेट का नाम, या टेम्पलेट नामों की सूची को स्वीकार करता है।उदाहरण:
['foo.html', 'path/to/bar.html']
-
SimpleTemplateResponse.context_data
-
टेम्प्लेट रेंडर करते समय संदर्भ डेटा का उपयोग किया जाना है। यह एक
dict
होनी चाहिए।उदाहरण:
{'foo': 123}
-
SimpleTemplateResponse.rendered_content
-
वर्तमान टेम्पलेट और संदर्भ डेटा का उपयोग करते हुए, प्रतिक्रिया सामग्री का वर्तमान प्रदान किया गया मूल्य।
-
SimpleTemplateResponse.is_rendered
-
एक बूलियन यह दर्शाता है कि क्या प्रतिक्रिया सामग्री प्रदान की गई है।
तरीके
-
SimpleTemplateResponse.__init__(template, context=None, content_type=None, status=None, charset=None, using=None)
[source] -
दिए गए टेम्पलेट, संदर्भ, सामग्री प्रकार, HTTP स्थिति, और चारसेट के साथ एक
SimpleTemplateResponse
ऑब्जेक्ट को इंस्टेंट करता है।-
template
-
बैकएंड-निर्भर टेम्पलेट ऑब्जेक्ट (जैसे कि
get_template()
) द्वारा लौटाया गया, टेम्पलेट का नाम या टेम्पलेट नामों की सूची। -
context
- टेम्प्लेट के संदर्भ में जोड़ने के लिए मूल्यों का एक बड़ा हिस्सा। डिफ़ॉल्ट रूप से, यह एक खाली शब्दकोश है।
-
content_type
-
HTTP
Content-Type
हेडर में शामिल मूल्य, MIME प्रकार विनिर्देश और वर्ण सेट एन्कोडिंग सहित। यदिcontent_type
निर्दिष्ट है, तो इसका मान उपयोग किया जाता है। अन्यथा,DEFAULT_CONTENT_TYPE
का उपयोग किया जाता है। -
status
- प्रतिक्रिया के लिए HTTP स्थिति कोड।
-
charset
-
वह चारसेट जिसमें प्रतिक्रिया को एनकोड किया जाएगा।
यदि नहीं दिया गया है तो उसे
content_type
से निकाला जाएगा, और यदि वह असफल है, तोDEFAULT_CHARSET
सेटिंग का उपयोग किया जाएगा। -
using
-
टेम्पलेट लोड करने के लिए उपयोग करने के लिए एक टेम्पलेट इंजन का
NAME
।
-
-
SimpleTemplateResponse.resolve_context(context)
[source] -
एक टेम्पलेट रेंडर करने के लिए उपयोग किया जाएगा संदर्भ डेटा प्रीप्रोसेस। संदर्भ डेटा की एक बड़ी संख्या को स्वीकार करता है। डिफ़ॉल्ट रूप से, वही
dict
।संदर्भ को अनुकूलित करने के लिए इस विधि को ओवरराइड करें।
-
SimpleTemplateResponse.resolve_template(template)
[source] -
प्रतिपादन के लिए उपयोग करने के लिए टेम्पलेट उदाहरण को हल करता है। एक बैकएंड-निर्भर टेम्पलेट ऑब्जेक्ट (जैसे
get_template()
), टेम्पलेट का नाम, या टेम्पलेट नामों की सूची को स्वीकार करता है।बैकेंड-आश्रित टेम्पलेट ऑब्जेक्ट उदाहरण प्रदान करने के लिए लौटाता है।
टेम्पलेट लोडिंग को कस्टमाइज़ करने के लिए इस विधि को ओवरराइड करें।
-
SimpleTemplateResponse.add_post_render_callback()
[source] -
एक कॉलबैक जोड़ें जो रेंडर होने के बाद लागू किया जाएगा। इस हुक का उपयोग कुछ प्रसंस्करण कार्यों (जैसे कैशिंग) को स्थगित करने के लिए किया जा सकता है जब तक कि रेंडरिंग नहीं हुआ है।
यदि
SimpleTemplateResponse
पहले से ही प्रदान किया गया है, तो कॉलबैक तुरंत लागू किया जाएगा।जब कॉल किया जाता है, तो कॉलबैक को एक एकल तर्क दिया जाएगा - प्रस्तुत किया गया
SimpleTemplateResponse
उदाहरण।यदि कॉलबैक एक मान देता है जो कोई
None
, तो इसका उपयोग मूल प्रतिक्रिया ऑब्जेक्ट के बजाय प्रतिक्रिया के रूप में किया जाएगा (और अगले पोस्ट रेंडरिंग कॉलबैक आदि के लिए पारित किया जाएगा)
-
SimpleTemplateResponse.render()
[source] -
SimpleTemplateResponse.rendered_content
द्वारा प्राप्त परिणाम के लिएresponse.content
सेट करता है, सभी पोस्ट-रेंडरिंग कॉलबैक चलाता है, और परिणामी प्रतिक्रिया ऑब्जेक्ट देता है।render()
में केवल पहली बार कॉल करने का प्रभाव होगा। बाद की कॉल पर, यह पहली कॉल से प्राप्त परिणाम लौटाएगा।
TemplateResponse
ऑब्जेक्ट्स
-
class TemplateResponse
[source] -
TemplateResponse
SimpleTemplateResponse
का एक उपवर्ग है जो वर्तमानHttpRequest
बारे में जानता है।
तरीके
-
TemplateResponse.__init__(request, template, context=None, content_type=None, status=None, charset=None, using=None)
[source] -
दिए गए अनुरोध, टेम्पलेट, संदर्भ, सामग्री प्रकार, HTTP स्थिति, और चारसेट के साथ एक
TemplateResponse
वस्तु को इंस्टेंट करता है।-
request
-
एक
HttpRequest
उदाहरण। -
template
-
बैकएंड-निर्भर टेम्पलेट ऑब्जेक्ट (जैसे कि
get_template()
) द्वारा लौटाया गया, टेम्पलेट का नाम या टेम्पलेट नामों की सूची। -
context
- टेम्प्लेट के संदर्भ में जोड़ने के लिए मूल्यों का एक बड़ा हिस्सा। डिफ़ॉल्ट रूप से, यह एक खाली शब्दकोश है।
-
content_type
-
HTTP
Content-Type
हेडर में शामिल मूल्य, MIME प्रकार विनिर्देश और वर्ण सेट एन्कोडिंग सहित। यदिcontent_type
निर्दिष्ट है, तो इसका मान उपयोग किया जाता है। अन्यथा,DEFAULT_CONTENT_TYPE
का उपयोग किया जाता है। -
status
- प्रतिक्रिया के लिए HTTP स्थिति कोड।
-
charset
-
वह चारसेट जिसमें प्रतिक्रिया को एनकोड किया जाएगा।
यदि नहीं दिया गया है तो उसे
content_type
से निकाला जाएगा, और यदि वह असफल है, तोDEFAULT_CHARSET
सेटिंग का उपयोग किया जाएगा। -
using
-
टेम्पलेट लोड करने के लिए उपयोग करने के लिए एक टेम्पलेट इंजन का
NAME
।
-
प्रतिपादन की प्रक्रिया
इससे पहले कि कोई
TemplateResponse
उदाहरण क्लाइंट को वापस किया जा सके, उसे प्रस्तुत किया जाना चाहिए।
रेंडरिंग प्रक्रिया टेम्पलेट और संदर्भ के मध्यवर्ती प्रतिनिधित्व को लेती है, और इसे अंतिम बाइट स्ट्रीम में बदल देती है जिसे क्लाइंट को परोसा जा सकता है।
ऐसी तीन परिस्थितियाँ हैं, जिनके तहत
TemplateResponse
जाएगा:
-
जब
SimpleTemplateResponse.render()
विधि का उपयोग करके स्पष्ट रूप सेTemplateResponse
उदाहरण प्रस्तुत किया गया है। -
जब प्रतिक्रिया की सामग्री स्पष्ट रूप से
response.content
असाइन करके निर्धारित की जाती है। - टेम्पलेट प्रतिक्रिया मिडलवेयर से गुजरने के बाद, लेकिन प्रतिक्रिया मिडलवेयर से गुजरने से पहले।
एक
TemplateResponse
केवल एक बार प्रदान किया जा सकता है।
SimpleTemplateResponse.render()
लिए पहला कॉल प्रतिक्रिया की सामग्री सेट करता है;
बाद के रेंडरिंग कॉल प्रतिक्रिया सामग्री को नहीं बदलते हैं।
हालाँकि, जब
response.content
स्पष्ट रूप से असाइन किया जाता है, तो परिवर्तन हमेशा लागू होता है।
यदि आप सामग्री को फिर से प्रस्तुत करने के लिए मजबूर करना चाहते हैं, तो आप प्रदान की गई सामग्री का पुनर्मूल्यांकन कर सकते हैं, और प्रतिक्रिया की सामग्री को मैन्युअल रूप से असाइन कर सकते हैं:
# Set up a rendered TemplateResponse >>> from django.template.response import TemplateResponse >>> t = TemplateResponse(request, 'original.html', {}) >>> t.render() >>> print(t.content) Original content # Re-rendering doesn't change content >>> t.template_name = 'new.html' >>> t.render() >>> print(t.content) Original content # Assigning content does change, no render() call required >>> t.content = t.rendered_content >>> print(t.content) New content
कॉलबैक के बाद रेंडर करें
कुछ ऑपरेशन - जैसे कि कैशिंग - एक अनियंत्रित टेम्पलेट पर प्रदर्शन नहीं किया जा सकता है। उन्हें पूरी तरह से पूर्ण और प्रदान की गई प्रतिक्रिया पर किया जाना चाहिए।
यदि आप मिडलवेयर का उपयोग कर रहे हैं, तो समाधान आसान है। मिडलवेयर एक दृश्य से बाहर निकलने पर प्रतिक्रिया की प्रक्रिया के लिए कई अवसर प्रदान करता है। यदि आप प्रतिक्रिया मिडलवेयर में व्यवहार करते हैं, तो टेम्पलेट रेंडरिंग होने के बाद इसे निष्पादित करने की गारंटी है।
हालाँकि, यदि आप डेकोरेटर का उपयोग कर रहे हैं, तो समान अवसर मौजूद नहीं हैं। डेकोरेटर में परिभाषित किसी भी व्यवहार को तुरंत नियंत्रित किया जाता है।
इसकी भरपाई करने के लिए (और किसी अन्य अनुरूप उपयोग के मामले),
TemplateResponse
रिप्रेसेंट आपको कॉलबैक को पंजीकृत करने की अनुमति देता है जो रेंडरिंग पूरी होने पर आह्वान किया जाएगा।
इस कॉलबैक का उपयोग करके, आप महत्वपूर्ण प्रसंस्करण को एक बिंदु तक स्थगित कर सकते हैं, जहां आप गारंटी दे सकते हैं कि प्रदान की गई सामग्री उपलब्ध होगी।
पोस्ट-रेंडर कॉलबैक को परिभाषित करने के लिए, केवल एक फ़ंक्शन को परिभाषित करें जो एकल तर्क लेता है - प्रतिक्रिया - और टेम्पलेट प्रतिक्रिया के साथ उस फ़ंक्शन को पंजीकृत करें:
from django.template.response import TemplateResponse def my_render_callback(response): # Do content-sensitive processing do_post_processing() def my_view(request): # Create a response response = TemplateResponse(request, 'mytemplate.html', {}) # Register the callback response.add_post_render_callback(my_render_callback) # Return the response return response
my_render_callback()
mytemplate.html
रेंडर होने के बाद
mytemplate.html
किया जाएगा, और तर्क के रूप में पूरी तरह से प्रदान की गई
TemplateResponse
उदाहरण प्रदान किया जाएगा।
यदि टेम्प्लेट पहले से ही प्रदान किया गया है, तो कॉलबैक तुरंत लागू किया जाएगा।
TemplateResponse
और
SimpleTemplateResponse
का उपयोग करना
TemplateResponse
ऑब्जेक्ट का उपयोग कहीं भी किया जा सकता है जो कि एक सामान्य
HttpResponse
का उपयोग किया जा सकता है।
इसे कॉलिंग
render()
विकल्प के रूप में भी इस्तेमाल किया जा सकता है।
उदाहरण के लिए, निम्नलिखित सरल दृश्य एक
TemplateResponse
साथ एक साधारण टेम्पलेट और एक क्वेरीसेट वाला संदर्भ देता है:
from django.template.response import TemplateResponse def blog_index(request): return TemplateResponse(request, 'entry_list.html', {'entries': Entry.objects.all()})