Pytanie django 1.5 - Jak używać zmiennych wewnątrz statycznego tagu


Obecnie migrowałem wszystkie odwołania do plików statycznych w moim projekcie do nowego tagu {% static%} wprowadzonego przez django 1.5, ale mam problem, w niektórych miejscach używam zmiennych do pobierania treści. Z nowym tagiem nie mogę, czy istnieje sposób na rozwiązanie tego problemu?

Obecny kod:

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

Co to powinno być (to nie działa):

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

76
2018-05-20 18:24


pochodzenie




Odpowiedzi:


Powinieneś być w stanie łączyć łańcuchy z add filtr szablonów:

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

To, co próbujesz zrobić, nie działa z static znacznik szablonu, ponieważ przyjmuje ciąg lub tylko zmienną:

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

114
2018-05-20 18:45



Właśnie to przetestowałem, to też nie działa. Wydaje się, że muszę wymyślić obejście tego problemu - Oscar Carballal
Czy możesz być bardziej konkretny, ponieważ "to nie działa"? Właśnie przetestowałem to i wyjścia /static/assets/flags/de.gif bez żadnych problemów... - Bernhard Vallant
Moja wina! Nie miałem załadowanego statycznego tagu, to rozwiązanie działało idealnie :) - Oscar Carballal
@daveoncode Żądanie powinno być dostępne w kontekście szablonu, jeśli masz django.core.context_processors.request dodano do twojego TEMPLATE_CONTEXT_PROCESSORS w Twoim settings.py. - Bernhard Vallant
Podobny problem, to nie działa: {{mus.bio | add: LANGUAGE_CODE | cut: "\ n"}} Chcę użyć języka. kod w szablonie var. Jakaś pomoc? - Timo


czystszym sposobem jest ustawienie {% static%} jako zmiennej od początku html, abyśmy mogli go używać w dowolny sposób.

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

18
2018-03-03 03:37



Nie powiedzie się, jeśli używasz pamięci masowej s3 z podpisanymi adresami URL, ponieważ serwer zaplecza nie jest wywoływany w celu przygotowania adresu URL dla każdego pliku. - shuckc
Wygląda to bardzo ładnie w szablonie, ale jest to raczej hack niż czysty sposób używania statycznego. - Mikuz


Mam to do pracy, używając pustego łańcucha dla statycznej ścieżki, a następnie używając moich zmiennych w ich własnej sekcji, jak poniżej:

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

11
2018-03-13 07:47



to jest super sprytne, ale co @horbor powiedział, możesz uprościć to jeszcze bardziej! docs.djangoproject.com/en/1.6/ref/templates/builtins/... - daviddeath


@Rounin, możesz przynajmniej użyć

{% get_static_prefix %} 

który zostanie załadowany, gdy {% załadujesz static%}. Jest to bardziej naturalne niż {% static ''%} :)


10
2018-05-18 18:21



To nie zadziała z takimi zmianami, jak ManifestStaticfilesStorage foo.js w foo.8c9a23d.js - Kos


Co jest warte, myślę, że jest to najłatwiejszy sposób:

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

To jest stare pytanie i nie jestem pewien, czy można by wtedy zastosować tę metodę, ale teraz, w Django 2.0, wydaje mi się, że to działa dobrze.


2
2018-03-28 04:45