{% url ... %} templatetag в шаблоне Django included не видит переменную

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

urls.py

urlpatterns = (
    path(
        "items/",
        views.list_view,
        name="list-view",
    ),
    path(
        "item/<int:pk>/",
        views.detail_view,
        name="detail-view",
    ),
)

views.py

def list_view(request):
    items = Item.objects.all()
    return render(request, "parent_template.html", context={"items": items})

def detail_view(request, pk):
    item = get_object_or_404(Item, pk=pk)
    return render(request, "detail_template.html", context={"item": item} 

parent_template.html

{% for item in items %}
  Parent: {{ item.pk }}
  {% include 'child_template.html' %}
{% endfor %}

child_template.html

Child: {{ item.pk }}
URL: {% url 'detail-view' item.pk %}

Я получаю обратную ошибку:

Reverse for '/test/url/<int:pk>/' with arguments '('',)' not found. 1 pattern(s) tried: ['test/url/(?P<pk>[0-9]+)/\\Z']

Если я удалю тег шаблона {% url ... %}, он отображается правильно и показывает:

Родитель: 1 Ребенок: 1

Итак, ясно, что элемент находится в контексте, но по какой-то причине он не передается в templatetag.

Я также пробовал такие варианты, как:

{% for item in items %}
    {% with new_item=item %}
        {% include 'child_template.html' %}
    {% endwith %}
{% endfor %}

Есть идеи?

Я использую Django 3.2.12

Я только что нашел ошибку - я искал не в том месте. Мой полный код выглядел следующим образом:

parent.html

<!-- {% include 'child_template.html' %} -->

{% for item in items %}
    {% with new_item=item %}
        {% include 'child_template.html' %}
    {% endwith %}
{% endfor %}

Я не обратил внимания на HTML-комментарий в верхней части шаблона. Очевидно, что Django все еще рендерит код на стороне сервера и в этот момент не имеет элемента в своем контексте.

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