2011-04-03 14 views
12

एक Django टेम्पलेट से, मैं एक फ़ाइल से एक html स्निपेट शामिल करना चाहते हैं शामिल करने के लिए, mysnippet.html कहते हैं:कैसे Django टेम्पलेट से बहु लाइन एचटीएमएल जावास्क्रिप्ट में चर

<div> 
    blah 
</div> 
JavaScript वैरिएबल में

:

<script type="text/javascript"> 
    var myvar = {% include 'mysnippet.html' %} 
</script> 

समस्या यह है कि नई लाइनों से बचने की आवश्यकता होगी। अन्यथा, जावास्क्रिप्ट "अनियमित स्ट्रिंग अक्षर" के लिए शिकायत करता है।

मुझे पता है कि {{x|addslashes}} के साथ स्लेश जोड़ा जा सकता है लेकिन मुझे नहीं पता कि {% include %} टैग के लिए इसे कैसे किया जाए।

उत्तर

16

क्या आपने filter टेम्पलेट टैग की कोशिश की है?

{% filter escapejs %}{% include 'mysnippet.html' %}{% endfilter %} 
+0

धन्यवाद जिसने मदद की। मैंने एक अलग जवाब में लिखा कि मैंने अंततः इसे कैसे तय किया। – gozzilli

+0

@gozzilli और 'escapejs' अंतर्निर्मित फ़िल्टर आपके लिए काम नहीं कर रहा था? http://docs.djangoproject.com/en/1.3/ref/templates/builtins/#escapejs – Jerzyk

+0

ओच! हाँ, यह काम करता है, क्षमा करें मुझे आरटीएफएम होना चाहिए। :(एकमात्र अंतर यह है कि एचटीएमएल स्रोत पर थोड़ा भयानक लग रहा है, क्योंकि यह सभी एक पंक्ति पर मुद्रित है, लेकिन फिर भी आप सही हैं, बचने की जरूरत सिर्फ वही है जो मुझे चाहिए ... – gozzilli

1

मैंने देखा है कि आप जावास्क्रिप्ट का उपयोग कर रहे हैं: सभी विशेष वर्ण का

{% filter addslashes %}{% include 'mysnippet.html' %}{% endfilter %} 

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

# views.py 
def mysnippet(request): 
    return render(
     request, 
     'yourapp/mysnippet.html', 
    ) 

# urls.py 
urlpatterns = patterns('yourapp.views', 
    url(r'mysnippet/$', 'mysnippet', name='mysnippet'), 
) 

आप जगह कर सकते हैं या अपने स्वयं के फ़ाइल में जावास्क्रिप्ट को अलग:

अपने टुकड़ा प्रदर्शित करने के लिए एक दृश्य बनाएँ

<script type="text/javascript"> 
$(document).ready(function() { 
    $.get("/yourapp/mysnippet/", function(data) { 
     var myvar = data; 
    }); 
}); 
</script> 

myvar अब एचटीएमएल शामिल करना चाहिए, नई लाइनों को उस मामले में भागने की जरूरत नहीं है।

2

निम्नलिखित Jerzyk सुझाव (धन्यवाद!), मैं का उपयोग किया है

{% filter addslashes %}{% include 'mysnippet.html' %}{% endfilter %} 

दुर्भाग्य से मुझे एहसास हुआ कि यह नई लाइनों से बच नहीं करता है के रूप में मैंने सोचा, लेकिन उद्धरण। तो मैं एक नया फिल्टर परिभाषित:

def escapenewline(value): 
    """ 
    Adds a slash before any newline. Useful for loading a multi-line html chunk 
    into a Javascript variable. 
    """ 
    return value.replace('\n', '\\\n') 
escapenewline.is_safe = True 
escapenewline = stringfilter(escapenewline) 

register.filter('escapenewline', escapenewline) 

और यह बजाय प्रयोग किया addslashes की: Django डॉक्स पर

{% filter escapenewline %}{% include 'mysnippet.html' %}{% endfilter %} 

वहाँ के लिए कैसे-एक पर custom templates है।

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