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

Django中基于模型ratings字段值自定义次数循环的实现

解决Django模板中根据评分循环显示星级的问题

你之前的写法错误在于Django模板标签({% %})内部不能嵌套变量插值语法({{ }}),模板引擎无法正确解析这种嵌套结构。下面提供两种可行的实现方式:

方案1:在模型中添加辅助方法

直接修改models.py,给Testimonials类新增一个返回评分对应范围的方法,让模板可以直接调用:

class Testimonials(models.Model):
    photo = models.ImageField(upload_to="testimonials_photo/", null=True, verbose_name='Client Photo', blank=True)
    ratings = models.IntegerField(verbose_name="rating")
    pt_messsage = models.TextField(verbose_name="Message")
    pt_name = models.CharField(verbose_name="Patient Name", max_length=200)
    client_profession = models.CharField(verbose_name="Patient Profession", max_length=200, blank=True)

    def rating_range(self):
        # 返回对应评分次数的范围对象,供模板循环使用
        return range(self.ratings)

    def __str__(self):
        return self.pt_name

模板中调用这个方法即可实现循环:

<div>
    {% for _ in testimonial.rating_range %}
    <span class="fa fa-star checked"></span>
    {% endfor %}
</div>

方案2:使用自定义模板过滤器(可选)

如果不想修改模型结构,可以通过自定义模板过滤器实现:

  1. 在你的app目录下创建templatetags文件夹(若不存在),并在其中新建__init__.py和custom_filters.py文件
  2. 在custom_filters.py中编写过滤器逻辑:
from django import template

register = template.Library()

@register.filter
def rating_range(value):
    return range(value)
  1. 在使用该过滤器的模板顶部加载它:
{% load custom_filters %}
  1. 最后在模板中通过过滤器生成循环范围:
<div>
    {% for _ in testimonial.ratings|rating_range %}
    <span class="fa fa-star checked"></span>
    {% endfor %}
</div>

内容的提问来源于stack exchange,提问作者Jayant Nigam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:25:23