Django模板分页时出现TemplateSyntaxError:无法解析'|'字符
问题排查与解决
错误根源分析
你的模板代码存在三个关键问题,直接触发了TemplateSyntaxError:
- Django模板过滤器语法错误:过滤器
|前后不能加空格,比如page_obj.number | add:'-3'这种写法会让模板引擎无法正确解析过滤器逻辑。 - 变量名笔误:
page.obj.number是错误写法,正确变量名应为page_obj.number(把.obj改为_obj)。 - 分页链接路径错误:
Previous、Next、Last按钮的href未拼接?page=参数,会导致跳转路径错误。
修正后的模板代码
{% extends "blog/base.html" %} {% block content %} {% for post in posts %} <article class="media content-section"> <img class="rounded-circle article-img" src="{{ post.author.profile.image.url }}"> <div class="media-body"> <div class="article-metadata"> <a class="mr-2" href="#">{{ post.author }}</a> <small class="text-muted">{{ post.date_posted|date:"F d, Y" }}</small> </div> <h2><a class="article-title" href="{% url 'post_detail' post.id %}">{{ post.title }}</a></h2> <p class="article-content">{{ post.content }}</p> </div> </article> {% endfor %} {% if is_paginated %} {% if page_obj.has_previous %} <a class="btn btn-outline-info mb-4" href="?page=1">First</a> <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.previous_page_number }}">Previous</a> {% endif %} {% for num in page_obj.paginator.page_range %} {% if page_obj.number == num %} <a class="btn btn-info mb-4" href="?page={{ num }}">{{num}}</a> {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %} <a class="btn btn-outline-info mb-4" href="?page={{ num }}">{{num}}</a> {% endif %} {% endfor %} {% if page_obj.has_next %} <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.next_page_number}}">Next</a> <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.paginator.num_pages }}">Last</a> {% endif %} {% endif %} {% endblock content %}
关键修正点说明
- 移除过滤器
|前后的空格,改为page_obj.number|add:'-3'的标准写法 - 修正变量名笔误:
page.obj.number→page_obj.number - 为分页按钮的
href补充?page=参数,确保跳转路径符合分页逻辑
内容的提问来源于stack exchange,提问作者chandraprakash
相关产品推荐
相关产品推荐

