Как (легко) поместить переменные python из Django в html?

В одном из моих проектов Django в файле views.py есть код:

from django.shortcuts import render
from django.http import HttpResponse
from .models import *

# Create your views here.

products = Product.objects.all()
product_list = list(products)

def displayhome(request):
    return render(request, 'bootstrap/index.html', {'title': product_list[0].title}, {'link': product_list[0].official_path_name})

Теперь, используя этот (очень неуклюжий) метод, я могу поместить строковую версию переменных в html, используя:

{{title}}
Например,

. Однако это не позволяет мне оперировать переменными, например, если я пошлю через product_list, я не смогу получить product_list[0]. Я смутно знаю об использовании тегов {% %} вместо {{ }}, но я (а) не совсем уверен, как они работают, и (б) не знаю, насколько они мощные, например, можно ли использовать их как обычный файл python.

Как я могу использовать переменную из python (скажем, целое число со значением 4) для создания переменного количества элементов html (например, 4 поля)?

Если нет простого способа выполнить python в html, есть ли способ вместо этого поместить мои переменные python в javascript и затем как-то использовать их в html?

Я использую эту структуру для своих представлений:

def your_view(request):
    myResult = MODEL_NAME.objects.all()

    context = {
            "variable1":[0,1,2,3,4,5,6],
            "variable2":"This is the variable 2",
            "variable3":"This is the variable 3",
            "variable4":myResult
            }
    return render(request, 'your_html.html', context)

и вы можете получить доступ к переменным в шаблоне следующим образом

<!-- See variables by index   -->
{{ variable1.0 }}
{{ variable1.2 }}

<!-- Iterate over variables -->
{% for x in variable1 %}
      {{ x }}
{% endfor %}

<!-- Variable 2 & 3 -->
{{ variable2 }}
{{ variable3 }}

<!-- Query set result -->
{% for x in variable4 %}
      {{ x.id }}
      {{ x.name }} <!-- and all the other values from your model -->
{% endfor %}

Вернуться на верх