【发布时间】:2020-04-16 08:29:55
【问题描述】:
我正在编写一个星级评分系统,以图形方式计算课程的星级,我使用了以下模板标签:
@register.simple_tag
def get_course_rating(course):
decimal, integer = math.modf(course.get_average_rating())
rating_stars = {
'stars': range(int(integer))
}
if decimal > 0:
rating_stars['star_half_empty'] = True
rating_stars['stars_empty'] = range((5 - int(integer)) - 1)
else:
rating_stars['star_half_empty'] = False
rating_stars['stars_empty'] = range(5 - int(integer))
return rating_stars
通过这种方式,我将星级评分放在 HTML 中:
{% load course_tags %}
{% get_course_rating course as rating %}
{% for i in rating.stars %}
<i class="icon-star"></i>
{% endfor %}
{% if rating.star_half_empty %}
<i class="icon-star-half-alt"></i>
{% endif %}
{% for i in rating.stars_empty %}
<i class="icon-star-empty"></i>
{% endfor %}
我觉得这样做很乏味,所以我想知道是否有办法改进它? 在 HTML 的意义上。
我使用这个 html 代码大约 3 次,对我来说这是重复的代码,我不希望这样......
我突然想到模板标签返回 html 代码,但我不确定这是否是好的做法......
还有更专业的解决方案吗?这对我的学习有很大帮助...
【问题讨论】:
-
您可以将此星标 html 作为单独的模板,并通过include 重复使用它。或者把它做成单独的inclusion_tag
-
最好的解决方案是包含标签!谢谢!!
标签: python html django python-3.x django-templates