Python 改进了模板标记-Django的功能

Python 改进了模板标记-Django的功能,python,html,django,python-3.x,django-templates,Python,Html,Django,Python 3.x,Django Templates,我正在编程一个星级评定系统,为了以图形方式计算课程的星级,我使用了以下模板标记: @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:

我正在编程一个星级评定系统,为了以图形方式计算课程的星级,我使用了以下模板标记:

@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 %}
{%load course\u tags%}
{%get_course_rating course as rating%}
{rating.stars%中的i为%1}
{%endfor%}
{%if rating.star\u half\u empty%}
{%endif%}
{rating.stars中的i的%u\u empty%}
{%endfor%}

我觉得这样做很乏味,所以我想知道是否有办法改进它? 在HTML的意义上

我使用这个html代码大约3次,对我来说,它是重复的代码,我不想这样

我突然想到,模板标记返回html代码,但我不确定这是否是一个良好的做法

还有更专业的解决方案吗?它将帮助我学习很多…

您可以将此
“开始分级html”
作为单独的模板,并与自定义模板一起重复使用

另一个动态性较差的选项--在模板中与一起重用

差异。

您可以将此
的“开始分级html”
作为单独的模板,并将其与自定义模板一起重用

另一个动态性较差的选项--在模板中与一起重用


不同之处。

您可以将此stars html作为单独的模板,并将其重新使用。或者把它分成单独的最好的解决方案是包含标签!!非常感谢。您可以将此stars html作为单独的模板,并将其重新使用。或者把它分成单独的最好的解决方案是包含标签!!非常感谢。将文件保存在以下路径中:
courses/snippets/rating_stars.html
。你怎么看?这个
html
是模板,所以应该转到
templates
目录(你选择的子目录)。标记定义-在中。我忘了把完整的路线放在这里:
课程/模板/课程/代码片段/评级_stars.html
。这样没关系吧?你觉得怎么样?是的,没关系。目录布局更符合个人口味,应该对您有意义。也就是说,我更喜欢有多个应用程序的django项目-一个通用模板目录(因为这些模板定义了我的网站的外观)(有应用程序的子目录),所以应用程序目录中没有模板。但是,在这种情况下-template是template标记的一部分,不应该直接使用。模板标签在某些应用程序中。因此,此模板需要位于此应用程序目录/templates目录中,而不是位于common templates目录中。简而言之,此模板必须位于应用程序的“templates”目录中,模板标记在哪里,对吗?将文件保存在以下路径中:
课程/snippets/rating_stars.html
。你怎么看?这个
html
是模板,所以应该转到
templates
目录(你选择的子目录)。标记定义-在中。我忘了把完整的路线放在这里:
课程/模板/课程/代码片段/评级_stars.html
。这样没关系吧?你觉得怎么样?是的,没关系。目录布局更符合个人口味,应该对您有意义。也就是说,我更喜欢有多个应用程序的django项目-一个通用模板目录(因为这些模板定义了我的网站的外观)(有应用程序的子目录),所以应用程序目录中没有模板。但是,在这种情况下-template是template标记的一部分,不应该直接使用。模板标签在某些应用程序中。所以,这个模板需要在这个app dir/templates dir中,而不是在common templates dir中。简而言之,这个模板必须在应用程序的“templates”目录中,模板标签在哪里,对吗?