django 1.5 - स्थिर टैग के अंदर चर का उपयोग कैसे करें


105

मैं वर्तमान में अपनी परियोजना के सभी स्थिर फ़ाइलों के संदर्भों को नए {% स्थिर%} टैग में माइग्रेट कर रहा हूं जो 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' %}" />

जवाबों:


149

आपको addटेम्प्लेट फिल्टर के साथ तार को समाहित करने में सक्षम होना चाहिए :

{% 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 %}

24

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

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

3
यदि आप साइन किए गए URL के साथ s3 स्टोरेज का उपयोग कर रहे हैं तो यह विफल हो जाता है, क्योंकि स्टोरेज बैकएंड के रूप में यदि प्रत्येक फाइल के लिए URL तैयार करने के लिए नहीं बुलाया गया है।
21

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

23

इसके लायक क्या है, मुझे लगता है कि यह सबसे आसान तरीका है:

<img src="{% static 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' %}" ... >

यह एक पुराना सवाल है और मुझे यकीन नहीं है कि अगर इस विधि को वापस किया जा सकता है, लेकिन अब, Django 2.0 में यह मेरे लिए ठीक काम करता है।


4
मैं पुष्टि करता हूं कि यह विधि Django 2.0 में काम करती है, और मेरी राय में, यह समस्या को हल करने का सबसे अच्छा तरीका है।
ओरंगफ्ट

मेरे लिए काम करता है, लेकिन डॉक्स इस चेतावनी के साथ आते हैं: "स्ट्रिंग्स जो पूर्णांकों के लिए
ज़ब्त की

हैशेड फ़ाइल नामों (ManifestStaticfilesStorage) के साथ काम नहीं करता है।
run_the_race

@run_the_race जो वास्तव में विषय है। लेकिन चूंकि हम जानते हैं कि पहला तर्क पूर्णांक नहीं हो सकता है, ऐसे में यह सुरक्षित होना चाहिए। इसके अलावा, क्या हैशेड फ़ाइल नामों में " str " या " एड " परिभाषित है?
एलिकांडिल

17

मुझे यह स्थिर पथ के लिए एक रिक्त स्ट्रिंग का उपयोग करके काम करने और फिर अपने स्वयं के खंड में अपने चर का उपयोग करने के लिए मिला, जैसे:

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

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

2
खाली स्ट्रिंग का उपयोग करने के बजाय, उपयोग करें {% get_static_prefix %}
मार्टिन पीटर्स

13

@ आप, कम से कम, उपयोग कर सकते हैं

{% get_static_prefix %} 

जब आप {% लोड स्थिर%} लोड हो जाएगा। यह अधिक स्वाभाविक है तो {% स्थिर ’’%} :)


यह ManifestStaticfilesStorage जैसी चीजों के साथ काम नहीं करेगा कि परिवर्तन foo.jsमेंfoo.8c9a23d.js
कोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.