2012-01-08 15 views
11

डॉक्स में यह कहते हैं:Django टेम्पलेट्स में ऑटो से बचने के लिए कैसे?

केवल अपवाद, चर कि पहले से ही "सुरक्षित" के रूप में चिह्नित कर रहे हैं भागने से कर रहे हैं या तो कोड है कि चर आबादी, या क्योंकि यह सुरक्षित था या भागने है फ़िल्टर लागू द्वारा "

" चरम आबादी "भाग कैसे काम करता है? मैं वास्तव में एक टेम्पलेट टैग को दृश्य में सुरक्षित घोषित करने का एक तरीका ढूंढ रहा हूं। मुझे लगता है कि एक डिजाइनर को देना अच्छा नहीं है तय करें। मेरा सहकर्मी इसे तब भी जोड़ देगा जब वह 'सोचता है' यह एक अच्छा विचार है।

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs

उत्तर

22

Django जो django.utils.safestring.mark_safe का उपयोग कर बनाया जा सकता है सुरक्षित तार (विशेष रूप से SafeUnicode या SafeString) कहा जाता तार का एक उपवर्ग, है। टेम्पलेट इंजन एक सुरक्षित स्ट्रिंग भर आता है जब यह उस पर से बचने एचटीएमएल प्रदर्शन नहीं करता:

>>> from django.utils.safestring import mark_safe 
>>> from django.template import Template, Context 
>>> Template("{{ name }}").render(Context({'name': mark_safe('<b>Brad</b>')})) 
u"<b>Brad</b>" 

आप अपने खुद के टेम्पलेट टैग लिख रहे हैं, तो आप render() जो एक स्ट्रिंग है माना जाएगा वापस आ जाएगी लागू करने की आवश्यकता सुरक्षित के रूप में, जिसका अर्थ है कि आपको अपने आप को किसी भी भागने को संभालना होगा। हालांकि यदि आप एक टेम्पलेट फ़िल्टर लिख रहे हैं, तो आप लौटे गए मूल्य के ऑटो से बचने से बचने के लिए फ़िल्टर पर विशेषता is_safe = True सेट कर सकते हैं, उदा।

@register.filter 
def myfilter(value): 
    return value 
myfilter.is_safe = True 

विवरण के लिए https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#filters-and-auto-escaping देखें।

5

आप django.utils.safestring.mark_safe कॉल करेगा और आपको चर

... 
return direct_to_template('my-template.html', {'safe_var': mark_safe('<script>alert("");</script>')}) 

टेम्पलेट में पारित (चेतावनी पॉपअप जाएगा) से बचने के बिना यह प्रिंट किया जाएगा सकता है। हालांकि ऑटो-एस्केप वास्तव में एक शानदार विशेषता है जो आपको कुछ बुरी चीजों से बचाएगी।

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