Django:循环中的包含标签导致我的渲染速度慢吗?

时间:2013-04-24 16:39:03

标签: django

对于Django来说还是一个新手并且担心我以错误的方式解决了这个问题。

我的网站使用“trail”:链接到内容的小部件组件。我有一个模板,可以渲染这些轨迹,模板有很多选项(是否显示图像,显示多少个单词等)。我使用以下包含标记实现了这一点:

@register.inclusion_tag('reviews/review_trail.html')
def review_trail(
    review, 
    coverPosition='left', 
    showLargeHeadings=False, 
    wordsToShow=30, 
    ):
        return {
            'r' : review, 
            'coverPosition': coverPosition, 
            'scoreMode': scoreMode, 
            'showLargeHeadings': showLargeHeadings, 
            'wordsToShow': wordsToShow, 
        }    

我在视图中多次使用此函数,通常是这样的循环:

{% for r in reviews %}
    {% review_trail review=r coverPosition="right" %}
{% endfor %}

我发现最近性能越来越差。我花了一些时间调整静态文件(缓存,组合等)和SQL调用(索引,分析等)。看profiling results,大部分缓慢似乎来自模板渲染。

这种编码对我应用的性能有害吗?我认为通过遵循DRY原则我很聪明,但也许我正在为自己射击。

1 个答案:

答案 0 :(得分:2)

这将是您的reviews/review_trail.html文件:

{% macro review_trail(review, coverPosition='right') %}
    {{ review }} ... other stuff to render here, like the cover position
    Our cover position is: {{ coverPosition }}
{% endmacro %}

现在,在您的其他模板中,您只需执行此操作:

{% from 'reviews/review_trail.html' import review_trail %}

{% for r in reviews %}
    {{ review_trail(review=r) }}
{% endfor %}