对于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原则我很聪明,但也许我正在为自己射击。
答案 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 %}