2009-12-03 13 views
19

अभी, अगर मैं जाँच करने के लिए वर्तमान पृष्ठ http:// या https:// के माध्यम से पहुँचा है या नहीं करना चाहते हैं, मैं निम्नलिखित जावास्क्रिप्ट मेरे टेम्पलेट में इस्तेमाल करते हैं और document.write से एचटीएमएल लिखेंगे:क्या आप Django के टेम्पलेट से इंटरनेट प्रोटोकॉल की जांच कर सकते हैं?

<script type="text/javascript"> 
var protocol = document.location.protocol; 
if (protocol == "http:") 
    document.write("regular"); 
else 
    document.write("secured"); 
</script> 

वहाँ एक और तरीका प्राप्त करने के लिए है जावास्क्रिप्ट का उपयोग किये बिना Django के टेम्पलेट में ऊपर?

+1

यदि आप केवल अपने Django से बनाए गए पृष्ठ में मिश्रित HTTP/HTTPS सामग्री से बचने की कोशिश कर रहे आप src = "// ajax.googleapis.com/ajax/libs/jquery/1.8 की तरह प्रोटोकॉल संबंधित URL विचार कर सकते हैं .2/jquery.min.js "। – jnichols959

उत्तर

40

यदि आप एक RequestContext उपयोग करते हैं, आप निम्न कर सकते हैं:

<p>You used: {% if request.is_secure %}HTTPS{% else %}HTTP{% endif %} 

Django प्रलेखन के relevant part देखें।

+3

आपको पूर्ण उपयोग यूआरएल प्राप्त करने के लिए एक छोटे विकल्प के रूप में HTTP {% अगर request.is_secure%} एस {% endif%}: // {{request.get_host}} का उपयोग करने में सक्षम होना चाहिए। – Fydo

+1

यदि आप बेस यूआरएल को अपने वर्तमान प्रोटोकॉल से मेल खाना चाहते हैं, तो आपको मैन्युअल रूप से स्विच करने की कोशिश नहीं करनी चाहिए, लेकिन बस '// होस्ट का उपयोग करें।com/path' यह वर्तमान कनेक्शन सुरक्षित होने पर https के माध्यम से कनेक्ट होगा, और http के माध्यम से जब यह नहीं होगा। – jcdyer

9

आप अपने setting.py फ़ाइल में उचित अनुरोध संदर्भ प्रोसेसर सक्षम करना होगा:

TEMPLATE_CONTEXT_PROCESSORS = ('django.core.context_processors.request',) 

टेम्पलेट अब एक चर नामित अनुरोध है कि वर्तमान HttpRequest शामिल होगा। आप प्रोटोकॉल को खोजने के लिए उपयोग कर सकते हैं:

{{ request.is_secure }} 
2

अपने खाके में RequestContext और request.is_secure उपयोग करके देखें।

एक चेतावनी, HTTPS का पता लगाने की प्रक्रिया एक सर्वर सेटअप से अगले में भिन्न हो सकती है, इसलिए आपको request.is_secure काम करने के लिए थोड़ा सा काम करना पड़ सकता है। आप यह सुनिश्चित करके यह काम कर सकते हैं कि आपका फ्रंट एंड/रिवर्स प्रॉक्सी सेट 'HTTP_X_FORWARDED_HOST' या एक मिडलवेयर क्लास लिखकर जो आपके सेटअप के लिए कस्टम है।

यदि आप कस्टम मिडलवेयर मार्ग पर जाते हैं, तो एक प्रारंभिक बिंदु के रूप में [1] SetRemoteAddrFromForwardedFor कोड [2] का उपयोग करें।

(मैं केवल पोस्ट प्रति 1 लिंक अनुमति तो कृपया में गड़बड़ लिंक बहाना)

[1]: docs.djangoproject.com/en/dev/releases/1.1/#id1 "Django 1.1 रिलीज नोट्स - निकाली SetRemoteAddrFromForwardedFor मिडलवेयर "

[2]: code.djangoproject.com/browser/django/trunk/django/middleware/http.py?rev=11000#L33" SetRemoteAddrFromForwardedFor "

9

Django 1.10 के बाद से, आप उपयोग कर सकते हैं:

request.scheme 

एक दृश्य है, या एक टेम्पलेट में में:

{{ request.scheme }} 

से the docs

एक स्ट्रिंग अनुरोध की योजना का प्रतिनिधित्व (http या https आमतौर पर)।

+2

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

+0

सलाह के लिए धन्यवाद, दस्तावेज़ों के लिए जोड़ा लिंक – slavugan

संबंधित मुद्दे

 संबंधित मुद्दे