के रूप में कहा अन्य उत्तर में, यह जानकारी Accept
अनुरोध हेडर में स्थित है। HttpRequest.META['HTTP_ACCEPT']
के रूप में अनुरोध में उपलब्ध है।
हालांकि कोई भी सामग्री अनुरोध प्रकार नहीं है, और यह हेडर अक्सर स्वीकृत/पसंदीदा सामग्री प्रकारों की एक सूची है। यह सूची ठीक से शोषण करने के लिए थोड़ा परेशान हो सकती है। यदि request.META['HTTP_ACCEPT']
"text/html;q=0.9,application/xhtml+xml,application/xml;q=0.8,*/*;q=0.7"
के बराबर है,
import re
def get_accepted_content_types(request):
def qualify(x):
parts = x.split(';', 1)
if len(parts) == 2:
match = re.match(r'(^|;)q=(0(\.\d{,3})?|1(\.0{,3})?)(;|$)',
parts[1])
if match:
return parts[0], float(match.group(2))
return parts[0], 1
raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
qualified_content_types = map(qualify, raw_content_types)
return (x[0] for x in sorted(qualified_content_types,
key=lambda x: x[1], reverse=True))
उदाहरण के लिए: यहाँ एक समारोह है कि काम करता है है। यह वापस आ जाएगा: ['application/xhtml+xml', 'text/html', 'application/xml', '*/*']
(वास्तव में, क्योंकि यह जनरेटर लौटाता है)।
फिर आप पहली सामग्री प्रकार का चयन करने के लिए परिणामी सूची में पुन: प्रयास कर सकते हैं, जिसे आप सही तरीके से जवाब देना चाहते हैं।
ध्यान दें कि इस फ़ंक्शन को अधिकांश मामलों के लिए काम करना चाहिए, लेकिन q=0
जैसे मामलों को संभाल न करें जिसका अर्थ है "स्वीकार्य नहीं"।
सूत्रों का कहना है: HTTP Accept header specification और Quality Values specification
स्रोत
2016-03-06 15:12:40
में यहाँ उल्लेख किया मैं जानता हूँ कि यह पुराना है, लेकिन हालांकि यह स्वीकार जवाब है, यह नहीं सही है । जैसा कि नीचे जनवरी की टिप्पणी में उल्लेख किया गया है, सही विधि 'स्वीकार करें' हैडर, 'HttpRequest.META.get (' HTTP_ACCEPT ') के माध्यम से सुलभ है। –
आप दोनों मामलों (प्लस एक डिफ़ॉल्ट) को संभालने के लिए फ़ॉलबैक कर सकते हैं: 'request.META.get ('HTTP_ACCEPT', request.META.get ('CONTENT_TYPE', 'application/your_default')) –