Я тоже с этим боролся. На первый взгляд кажется, что вышеприведенные решения должны работать. Однако архитектура django требует, чтобы каждый html-файл имел свои собственные отображаемые переменные (то есть {{contact}}
отображается в contact.html
, в то время как {{posts}}
идет, например, index.html
и т. Д.). С другой стороны, теги <script>
появляются после {%endblock%}
in base.html
, от которого наследуются contact.html
и index.html
. В основном это означает, что любое решение, включая
<script type="text/javascript">
var myVar = "{{ myVar }}"
</script>
обязательно завершится с ошибкой, поскольку переменная и сценарий не могут сосуществовать в одном и том же файле.
Простое решение, которое я в конце концов придумал и сработало для меня, заключалось в том, чтобы просто обернуть переменную тегом id и позже обратиться к нему в файле js, например:
// index.html
<div id="myvar">{{ myVar }}</div>
, а затем:
// somecode.js
var someVar = document.getElementById("myvar").innerHTML;
и просто включите <script src="static/js/somecode.js"></script>
в base.html
как обычно.
Конечно, это всего лишь получение контента. Что касается безопасности, просто следуйте другим ответам.