Как использовать переменную Javascript в условии if в шаблоне Django?
В настоящее время я работаю над шаблоном django, в котором я хочу использовать переменную javascript в условии if. Мой код выглядит следующим образом
{% extends 'base.html' %}
{% block content %}
<br>
<div class="buttonRow">
{% for t in tickerList %}
<button class="btn btn-dark" onclick="changeChart(this.value)" value="{{ t }}">{{ t }}</button>
{% endfor %}
</div>
<br><br>
{% if {{ currentTicker }} %}
{{ currentTicker |safe }}
{% else %}
<p>NO Graph</p>
{% endif %}
{% endblock %}
<style>
.buttonRow {
width: 100%;
float: left;
border: solid 1px blue;
text-align: center;
}
button {
background: black;
color: white;
}
</style>
<script>
var currentTicker = {{ tickerList.0 }}
function changeChart(ticker) {
currentTicker = ticker;
}
</script>
Здесь словарь, который я отправляю с серверной стороны, может выглядеть следующим образом
{
"tickerList" : ["GOOGL","TSLA"],
"GOOGL" : (plotly object),
"TSLA" : (plotly Object)
}
В зависимости от нажатия пользователем кнопки я хочу менять график (объект plotly) на экране. Как вы можете видеть, я сделал необходимые кнопки и изменил переменную ``currentTicker'', но я не уверен, как я могу изменить график в реальном времени на экране, когда пользователь нажимает на кнопку. Может ли кто-нибудь помочь с этим?
Django и JavaScript оцениваются в разное время выполнения: Ваш шаблон Django оценивается на стороне сервера, как только приходит запрос, в то время как ваш код JavaScript оценивается на стороне клиента после того, как он был получен браузером. Поэтому переменные JavaScript не могут быть прочитаны вашим шаблонизатором Django.
Насколько я понимаю, вы хотите обновить информацию о текущем выбранном тикере в вашем HTML DOM. Чтобы достичь этого, есть два возможных решения:
Вы можете отправить выбранный тикер на ваш сервер в качестве параметра запроса:
{% for t in tickerList %} <a class="btn btn-dark" href="?currentTicker={{ t }}">{{ t }}</a> {% endfor %}и прочитать его там:
request.GET.get("currentTicker")Или вы можете изменить его только на стороне клиента. Для этого измените строки
{% if {{ currentTicker }} %} {{ currentTicker |safe }} {% else %} <p>NO Graph</p> {% endif %}на
<p id="currentTicker">NO Graph</p>и добавьте это в ваш JavaScript код:
function changeChart(ticker) { document.getElementById("currentTicker").innerText = ticker || 'NO Graph'; }
При первом подходе вы можете делать свою работу только на Python, перерисовывая страницу при каждом изменении выбора тикера. Это полезно для любых вычислений, требующих больших затрат времени и т.д.
Второй подход обеспечивает мгновенную обратную связь для пользователя, но при больших вычислениях увеличивает нагрузку на сторону клиента.
В конечном итоге, для вашего случая использования, ваше решение может зависеть от ваших личных предпочтений, с каким языком вам удобнее работать.