доступ к элементу массива шаблонов django

#python #django

#python #django

Вопрос:

привет: day_records — это массив, я хочу получить доступ к его элементу.если я заменю точку на 0 или 1, это правильно, но когда я использую point , он не может получить доступ к элементу и без синтаксической ошибки.

 plant.bind("plothover",
       function(event,pos,item){
       if(item){
           removeTooltip();
           var point = item.dataIndex;           
           showTooltip(item.pageX,item.pageY,"{{day_records.point.date}}");
       }else{
           removeTooltip();
       }
       });
  

итак, как я могу получить доступ к элементу массива с переменной точкой?

Комментарии:

1. Я думаю, что здесь есть некоторая путаница … вы смешиваете шаблоны django и javascript, как будто они могут обмениваться данными в двустороннем режиме. Происходит то, что {{day_records.point.date}} вычисляется в контексте шаблона django, а затем, после того как браузер получает страницу, вычисляется javascript. Шаблон может вставлять данные в javascript, но javascript не может оценить код шаблона django — к моменту запуска javascript код шаблона исчезает.

2. Мой ответ просто повторил бы то, что говорит Аарон.. (Подсказка, подсказка, аарон! : P) Кроме того, даже если бы это был весь код шаблона django, вы не можете выполнять поиск с разрешением переменных подобным образом. day_records.point попытался бы найти атрибуты, индексы и т.д. Для ‘point’, Но не то, что point разрешает, например, 0 или 1.

3. итак, могу ли я получить доступ к переменной javasript в django templet?

4. Нет, они полностью разделены. Javascript запускается только тогда, когда браузер загружает его.

Ответ №1:

Код вашего шаблона выполняется полностью независимо от JavaScript.

Браузер запускает JavaScript при загрузке страницы на основе любого исходного кода, созданного вашим шаблоном.

Создайте массив JavaScript с помощью языка шаблонов, который может использовать ваш скрипт, или используйте AJAX для запроса данных из django для заданной точки.

 day_records = new Array();
{% for point in day_records %}
    day_records[{{ forloop.counter0 }}] = '{{ point.date }}';
{% endfor %}

plant.bind("plothover",
       function(event,pos,item){
       if(item){
           removeTooltip();
           var point = item.dataIndex;           
           showTooltip(item.pageX,item.pageY, day_records[point]);
       }else{
           removeTooltip();
       }
       });
  

Ответ №2:

Я пробовал разные вещи, когда наткнулся на эту проблему. Я попробовал точку, это не дало мне того, что я хотел. Я знал, что это должен быть точечный стиль, поскольку в документации django так сказано.

У меня была такая переменная list: food = [{'rice':90},{'beans':56},{'peas':144}]

Наконец, сработало то, что: food.0.rice дало мне желаемое число (для риса), food.0.beans дало мне, какое число было для бобов.

Я пошел дальше, чтобы поэкспериментировать food = [
[{'rice':90},{'beans':56}],
[{'banana':90},{'groundnuts':56}]
]
я мог получить доступ к значению groundnuts как food.1.groundnuts поскольку это второй элемент массива, я надеюсь, что кто-нибудь оценит это