3

对 Django 来说还是很陌生,担心我走错了路。

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

@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 调用(索引、分析等)。查看分析结果,大部分缓慢似乎来自模板渲染。

这种编码对我的应用程序的性能有害吗?我以为我遵循 DRY 原则很聪明,但也许我是在自取其辱。

4

1 回答 1

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 %}
于 2013-04-24T17:05:00.620 回答