English 中文(简体)
模板内的模板。如何避免渲染两次? (Móbǎn nèi de mó bǎn. Rúhé bìmiǎn wēndèng liǎng cì?)
原标题:
  • 时间:2009-01-22 11:22:00
  •  标签:

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

怎样更好地做到这一点?

最佳回答

这似乎是浪费的。为什么会这样呢?

每个模板都是一组标记和文本的混合物。在你的情况下,某个文本块已经被模板引擎访问过了。那又怎样?一旦它被转换成纯文本,它就会非常快速地通过下一个模板引擎。

你们有具体的表现问题吗?你们没有达到交易吞吐量的要求吗?有特定的问题吗?

代码太复杂吗?维护困难吗?经常出错吗?

我认为你的解决方案是充分的。就调试而言,我不确定在动态内容中使用模板标签是否是好的,但从基本的“模板呈现”角度来看,它是可以接受的。

问题回答

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

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

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

关键在于您将如何渲染单个对象的知识从您的视图中移出。





相关问题
热门标签