模板中的模板。如何避免渲染两次?

时间:2009-01-22 11:22:01

标签: python django django-templates

我有一个CMS,它需要一些动态内容并使用标准模板呈现它。但是我现在在动态内容中使用模板标签,因此我必须执行render_to_string,然后将其结果作为上下文变量传递给render_to_response。这似乎很浪费。

有什么更好的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

“这看起来很浪费”为什么会这样?

每个模板都是标签和文字的混合。在您的情况下,模板引擎已经访问了一些文本块。所以呢?一旦它被转换,它只是文本并非常快速地通过下一个模板引擎。

您是否有特定的性能问题?您是否达不到交易吞吐量要求?有特定的问题吗?

代码太复杂了吗?难以维持吗?它会一直打破吗?

我认为您的解决方案已足够。从调试的角度来看,我不确定动态内容中的模板标签是好的,但从基本的“模板渲染”的角度来看,它很好。

答案 1 :(得分:0)

你在做什么听起来不错,但问题可能是:为什么不直接将模板标签引用放在模板中而不是手动渲染它们?

<div>
    {% if object matches some criteria %}
        {% render_type1_object object %}
    {% else %}
        {% render_type2_object object %}
    {% endif %
    ... etc ...
</div>

或者,更好的是,有一个用于渲染对象(或对象列表)的中央模板标签,它封装了对象类型到模板标签的映射。然后,所有模板都只引用一个模板标签,模板本身不需要类型知识。

关键是你要了解如何从视图中渲染单个对象。