You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板中循环渲染HTML代码块?解决语法错误

嘿,我来帮你搞定这个Django模板循环的问题!首先得说,你用PHP的while思路来写Django模板肯定会踩坑——因为Django模板语法和PHP完全不一样,它没有while循环,也不允许直接在模板里修改变量值。

为什么你的代码会报错?

你遇到的'with' expected at least one variable assignment语法错误,本质原因有两个:

  1. Django模板不支持while循环,它只提供for循环来遍历可迭代对象;
  2. 即使你用{% with count = 0 %}成功定义了变量,也没法在模板里执行count +=1——Django模板是沙箱环境,只能读取上下文变量,不能直接修改或赋值。

正确的实现方式

下面给你两种实用的方案,按需选择:

方法1:从视图传递循环范围(推荐,符合Django设计理念)

Django鼓励把逻辑放在视图层,模板只负责渲染。如果循环次数是固定或动态的,最好在视图里把可迭代对象传给模板:

# 你的视图函数(比如views.py里的代码)
def rating_view(request):
    # 其他业务逻辑...
    # 传递一个包含5次循环的range对象
    context = {'loop_times': range(5)}
    return render(request, 'stories/rating_page.html', context)

然后在模板里用for循环遍历这个range:

{% extends 'stories/base.html' %} 
{% block body %} 
<h1>This is rating page</h1> 
<section class='rating-widget'> 
    {% for _ in loop_times %}
    <div class='rating-stars text-center'> 
        <ul class='stars'> 
            <li class='star selected' title='Poor' data-value='1'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
            <li class='star selected' title='Fair' data-value='2'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
            <li class='star selected' title='Good' data-value='3'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
            <li class='star selected' title='Excellent' data-value='4'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
            <li class='star selected' title='WOW!!!' data-value='5'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
        </ul> 
    </div> 
    {% endfor %}
</section> 

方法2:直接在模板里用字符串迭代(无需修改视图)

如果不想改动视图,也可以用一个长度为5的字符串来做迭代(字符串是可迭代对象,每个字符对应一次循环):

{% extends 'stories/base.html' %} 
{% block body %} 
<h1>This is rating page</h1> 
<section class='rating-widget'> 
    {% for _ in "aaaaa" %} {# 5个a,对应5次循环 #}
    <div class='rating-stars text-center'> 
        <ul class='stars'> 
            <li class='star selected' title='Poor' data-value='1'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
            <li class='star selected' title='Fair' data-value='2'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
            <li class='star selected' title='Good' data-value='3'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
            <li class='star selected' title='Excellent' data-value='4'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
            <li class='star selected' title='WOW!!!' data-value='5'> 
                <i class='fa fa-star fa-fw'></i> 
            </li> 
        </ul> 
    </div> 
    {% endfor %}
</section> 

这里用_作为循环变量是因为我们不需要用到它的值,只是需要重复5次渲染HTML块。


小提醒

如果循环次数是动态的(比如从数据库读取、用户配置),一定要用第一种方法从视图传递参数;如果是固定次数,两种方法都可以,但第一种更符合Django的“逻辑与渲染分离”的设计原则。

内容的提问来源于stack exchange,提问作者Chandimal Harischandra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:28:49