Django шаблонов. Есть ли способ вложить {{}} в {%%}? - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю с Django шаблонами. Я хочу передать переменную в мой шаблон с именем js_files , которая представляет собой список JavaScript файлов, которые я хочу добавить в конец HTML. Например, вот пример массива js_files :

js_files = ['fancy_dialog.js', 'animate_everything.js']  

В моем шаблоне Django я хотел бы иметь возможность сделать что-то вроде этого:

{% for js_file in js_files %}
<script src="{% static '{{ js_file | safe }}' %}"></script>
{% endfor %}

Вот что я получаю:

<script src="/static/%7B%7B%20js_file%20%7C%20safe_file%20%7D%7D"></script>
<script src="/static/%7B%7B%20js_file%20%7C%20safe_file%20%7D%7D"></script>

Вот что я хочу:

<script src="/static/fancy_dialog.js"></script>
<script src="/static/animate_everything.js"></script>

Синтаксис "{{js_file | safe}}" делает именно то, что я хочу к. Но я не могу суммировать это значение с "{% stati c 'JS -FILE-VARIABLE-HERE'%}". Это не гнездо. В любом случае, чтобы сделать это?

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020

Конечно, вы можете использовать переменные контекста шаблона в тегах-шаблонах (ну, конечно, те, которые написаны так, чтобы принимать их, но это так для большинства), вы просто передаете имя переменной напрямую - без кавычек и без contextvar {{ }} синтаксис. В вашем случае это просто вопрос:

{% for js_file in js_files %}
    <script src="{% static js_file %}"></script>
{% endfor %}
0 голосов
/ 20 апреля 2020

Я пока не могу комментировать, поэтому я поставлю это как ответ. Можете ли вы использовать django движок, чтобы генерировать строки скрипта в представлении, а затем передавать в виде списка в шаблон. Включите его как переменную «| safe». См. https://docs.djangoproject.com/en/3.0/topics/templates/#django .template.loader.engines

Что-то вроде:

from django.template import engines

django_engine = engines['django']

js_files = ['fancy_dialog.js', 'animate_everything.js']

html_template = []
for my_js_file in js_files:
    my_template = engines.from_string('{% load static %}<script src="{% static "{0}" %}"></script>'.format(my_js_file))
    html_template.append(my_template.render())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...