Могу ли я использовать переменную в качестве индекса для цикла в Python? - PullRequest
1 голос
/ 11 марта 2019

У меня есть цикл for в моем шаблоне python для выполнения массива значений:

labels: [{% for bftimes in dataBF.buffers.0.times %} "{{ bftimes }}", {% endfor %}]

Я хотел бы знать, могу ли я использовать переменную int в качестве индекса, вместо того, чтобы писать ее напрямую, как видно из кода выше.

Мне нужно использовать индекс выбранного значения раскрывающегося списка:

//returns the index of the selected value
document.getElementById("buffer").selectedIndex

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Вопросу нужно больше контекста, чтобы помочь нам понять вашу цель. Кажется, вы смешиваете Python со структурами данных JavaScript.

Моя общая рекомендация - сначала подготовить структуру данных python к тому, что вам понадобится, а затем преобразовать ее в json. Циклы в языке шаблонов Django должны использоваться только в простых случаях.

Если вы используете django> = 2.1, вы можете использовать json-script template tag

 {{ data|json_script:"my-data" }}

https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#json-script

Если нет, вы можете использовать

# views.py
import json
def foo(request):
    dataBF = {"a": [{"c": [1,2,3,1,1]},{"d": [1,2,3,1,1]}]}
    # here you can manipulate the data accordingly to what you need
    data = json.dumps(dataBF)
    return render(request, "index.html", context={"data": data})

На стороне шаблона

<script>
    const datajs = {{ data | safe }};
</script>

datajs - это объект javascript, с которым вы можете работать.

Я сделал пример, который вы можете проверить https://repl.it/@IvanPereira/python-to-javascript-django-template

0 голосов
/ 13 марта 2019

Вы можете сделать это двумя способами.

  1. Сохраните все значения в списке, который JavaScript будет рассматривать как массив json, и зацикливайтесь с использованием самого JavaScript.Таким образом, вы не сможете обновить записи с сервера, и все значения, которые должны быть зациклены, должны быть предварительно извлечены.

  2. Вы можете использовать вызов AJAX, чтобы передать выбранный индекс из JavaScript и вернуть новый массив и обновить его в шаблоне, используя сам JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...