2013-05-20 15 views
74

के अंदर चर का उपयोग कैसे करें मैं वर्तमान में अपने प्रोजेक्ट में सभी स्थिर फाइल संदर्भों को नए {% स्थिर%} टैग में माइग्रेट कर रहा हूं जो django 1.5 पेश किया गया है, लेकिन मुझे कुछ समस्या है सामग्री मैं सामग्री प्राप्त करने के लिए चर का उपयोग करें। नए टैग के साथ मैं नहीं कर सकता, क्या इसे हल करने का कोई तरीका है?django 1.5 - स्थिर टैग

वर्तमान कोड:

<img src="{{ STATIC_URL }}/assets/flags/{{ request.LANGUAGE_CODE }}.gif" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" /> 

यह क्या किया जाना चाहिए (यह काम नहीं करता):

<img src="{% static 'assets/flags/{{ request.LANGUAGE_CODE }}.gif' %}" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" /> 

उत्तर

104

आप add template filter साथ तार जोड़ लिए सक्षम होना चाहिए:

{% with 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' as image_static %} 
    {% static image_static %} 
{% endwith %} 

आप जो करने का प्रयास कर रहे हैं वह static टेम्पलेट टैग के साथ काम नहीं करता है क्योंकि यह या तो लेता है एक स्ट्रिंग या केवल एक चर:

{% static "myapp/css/base.css" %} 
{% static variable_with_path %} 
{% static "myapp/css/base.css" as admin_base_css %} 
{% static variable_with_path as varname %} 
+2

मैंने अभी इसका परीक्षण किया है, यह या तो काम नहीं करता है। ऐसा लगता है कि मुझे इस –

+1

के लिए कामकाज करना होगा, क्या आप "यह काम नहीं करते" के रूप में अधिक विशिष्ट हो सकते हैं? बस किसी भी समस्या के बिना इसका परीक्षण किया और '/ static/assets/flags/de.gif' आउटपुट ... –

+0

मेरी गलती! मेरे पास स्थैतिक टैग लोड नहीं हुआ था, यह समाधान पूरी तरह से काम करता है :) –

10

मैं इस स्थिर पथ के लिए एक खाली स्ट्रिंग का उपयोग कर और फिर अपने स्वयं के अनुभाग में मेरी वैरिएबल का उपयोग कर, इस तरह से काम करने के लिए मिल गया:

<a href= "{% static "" %}{{obj.a}}/{{obj.b}}/{{obj.c}}.gz" >Name</a> 
+1

यह सुपर चालाक है, लेकिन @horbor ने क्या कहा, आप इसे और भी सरल बना सकते हैं! https://docs.djangoproject.com/en/1.6/ref/templates/builtins/#std:templatetag-get_static_prefix – daviddeath

10

@rounin , कम से कम,

{% get_static_prefix %} 

जो लोड हो जाएगा जब आप {% लोड स्थिर%} लोड करेंगे। यह सिर्फ अधिक प्राकृतिक है {0 static ''%} :)

+0

बहुत बढ़िया, मैं अगली बार यह कोशिश करेंगे। – rounin

+0

यह ManifestStaticfilesStorage जैसी चीज़ों के साथ काम नहीं करेगा जो 'foo.8c9a23d.js' – Kos

17

एक क्लीनर तरीका एचटीएमएल की शुरुआत से एक चर के रूप में {% static%} को सेट करना है ताकि हम इसे किसी भी तरह से उपयोग कर सकें।

{% load static %} 
{% static "" as baseUrl %} 
<img src="{{ baseUrl }}/img/{{p.id}}"></img> 
+2

में 'foo.js' को बदलता है। यदि आप हस्ताक्षरित URL के साथ s3 संग्रहण का उपयोग कर रहे हैं, तो स्टोरेज बैकएंड के रूप में URL के लिए तैयार नहीं होने पर यह विफल हो जाता है प्रत्येक फाइल। – shuckc

+1

यह एक टेम्पलेट में बहुत अच्छा लग रहा है लेकिन स्थिर का उपयोग करने के एक साफ तरीके से यह हैक का अधिक है। – Mikuz

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