首页 > 解决方案 > 如何解决 Django 中显示“无法解析剩余部分”的 TemplateSyntaxError

问题描述

我正在尝试使用 for 循环重复呈现一段 HTML 代码。但是当我重新加载浏览器时,Django 会抛出 TemplateSyntaxError

<div class="carousel-item active">
    {% for number in range(3) %}
    <!--Slide {{ number + 1 }}-->
    <div class="row">
        {% for number in range(6) %}
        <!--Slide 1 Col {{ number + 1 }}-->
        <div class="col-lg-2">
            <div class="card" style="width: 100%;">
                <img class="card-img-top" src="..." alt="Card image cap">
                <div class="card-body">
                    <h5 class="card-title">Card title</h5>
                    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
                    <a href="#" class="btn btn-primary">Go somewhere</a>
                </div>
            </div>
        </div>
        {% endfor %}
    </div>
    {% endfor %}
</div>

我希望在 for 循环中重复渲染块,但得到“TemplateSyntaxError at / Could not parse the rest: '(3)' from 'range(3)'”

标签: pythondjango

解决方案


Django 不允许在模板中进行函数调用(带参数)以及下标。理由是业务逻辑不应该是模板的一部分。因此,您可以通过上下文将range(3)andrange(6)对象传递给模板。{{ number + 1 }}也不起作用,因为也不支持此类运算符。

另一种方法是使用Jinja,它是一个模板引擎,允许在模板中使用这种 Python 语法

由于数字非常小,第三种选择是使用字符串文字代替:

<div class="carousel-item active">
    {% for row in '123' %}
    <!--Slide {{ row }}-->
    <div class="row">
        {% for col in '123456' %}
        <!--Slide 1 Col {{ col }}-->
        <div class="col-lg-2">
            <div class="card" style="width: 100%;">
                <img class="card-img-top" src="..." alt="Card image cap">
                <div class="card-body">
                    <h5 class="card-title">Card title</h5>
                    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
                    <a href="#" class="btn btn-primary">Go somewhere</a>
                </div>
            </div>
        </div>
        {% endfor %}
    </div>
    {% endfor %}
</div>

推荐阅读