Что может заставить один и тот же блок include шаблона Django вести себя по-разному дважды на одной и той же странице?
Я пытаюсь includeпростой шаблон пагинации в шаблоне, который перечисляет записи блога, но он выводится без интерпретации, т.е. я вижу двойной тег, заключенный в фигурные скобки, как текст на результирующей веб-странице (см. изображение ниже).
Странно, но когда я также вставляю тот же блок выше на странице, и он интерпретируется нормально. Один и тот же include, дважды на одной и той же странице, разное поведение!
Между ними я выполняю итерации над одним и тем же объектом, который передается шаблону пагинации, так что, возможно, я чего-то не понимаю в состоянии этого объекта? Или процесс рендеринга Django.
{% extends "blog/base.html" %}
{% block title %}My blog site thing{% endblock %}
{% block content %}
<h1>Blog site</h1>
{% include 'pagination.html' with page_object=posts %}
{% for post in posts %}
<h2><a href="{{post.get_absolute_url}}">{{ post.title }}</a></h2>
<p class="date">Published {{post.publish}} by {{post.author}}</p>
{{post.body|truncatewords:5|linebreaks}}
{% endfor %}
{% include 'pagination.html' with page_object=posts %}
{% endblock %}
Pagination.html
<div class="pagination">
<span class="step-links">
{% if page_object.has_previous %}
<a href="?page={{ page_object.previous_page_number }}">Previous</a>
{% endif %}
<span class="current">
Page {{ page_object.number }} of {{ page_object.paginator.num_pages }}.
</span>
{% if page_object.has_next %}
<a href="?page={{ page_object.next_page_number }}">Next</a>
{% endif %}
</span>
</div>
views.py для этого приложения
from django.shortcuts import render, get_object_or_404
from .models import Post
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def post_list(request):
object_list = Post.published.all()
paginator = Paginator(object_list, 3)
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return render(request, 'blog/post/list.html', {'posts':posts})
def post_detail(request, year, month, day, post):
post = get_object_or_404(Post, slug=post, status='published',publish__year=year,publish__month=month, publish__day=day)
return render(request, 'blog/post/detail.html', {'post':post})
Вот как выглядит полученная страница:

Вот результирующий html (я добавил дополнительную строку вокруг ошибочного вывода, чтобы выделить его)
<!DOCTYPE html>
<html>
<head>
<title>My blog site thing</title>
<link href="/static/css/blog.css" rel="stylesheet">
</head>
</html>
<body>
<div id="content">
<h1>Blog site</h1>
<div class="pagination">
<span class="step-links">
<span class="current">
Page 1 of 2.
</span>
<a href="?page=">Next</a>
</span>
</div>
<h2><a href="/blog/2022/3/2/another-glorious-post/">Another glorious post</a></h2>
<p class="date">Published March 2, 2022, 9:26 p.m. by admin</p>
<p>Lorem ipsum text Lorem ipsum …</p>
<h2><a href="/blog/2022/3/2/classy-post/">Classy post</a></h2>
<p class="date">Published March 2, 2022, 9:25 p.m. by admin</p>
<p>This is the way</p>
<h2><a href="/blog/2022/3/1/another-post/">Another post</a></h2>
<p class="date">Published March 1, 2022, 7:26 a.m. by admin</p>
<p>Xyz</p>
{% include 'pagination.html' with page_object=posts %}
</div>
<div id="sidebar">
<h2>My blog</h2>
<p>This is my blog.</p>
</div>
</body>
Я даже вернулся и скопировал фактический код из книги, которой я следую (Django 3 на примере, Антонио Меле), и он идентичен!
Любая добрая душа, которая дочитала до этого момента, скажите, что я упустил?
Ok, так что я просто понял, что происходит, и делюсь на случай, если это будет полезно кому-то еще.
Моя IDE искажала форматирование файла шаблона при сохранении.
Итак, первое включение было идеальным маленьким
{% include 'pagination.html' with page=posts %}
Второй в итоге выглядел как
{% include
'pagination.html' with page=posts %}
Когда я отключил автоформатирование и исправил пробелы, он отобразился нормально.
Итак, мое большое открытие - возможно, очевидное для многих - состоит в том, что пробелы имеют значение в тегах шаблонов django! .