有没有办法为django中的每个视图执行某些操作?

时间:2011-08-28 16:54:13

标签: python django

我是Django的新手,来自Rails,所以这可以解释我下面的奇怪问题:

我的主要布局有一个侧边栏,列出了网站的最新更新。该主要布局用于我的webapp中的每个页面,因此创建的每个模板都扩展了main.html。

对于最新的更新部分,我只想在每次呈现页面时从帖子到Web应用程序获取最后5个更新。我想在页面加载后通过ajax调用使侧边栏执行此操作,但我认为这可能不是我的最佳选择。

我还考虑为我创建一个标签,然后只调用main.html中的标签。这很简单,但是我必须在标签代码中编写很多HTML,这似乎有点烦人(很多字符串附加等等,除非我错了,还有更好的方法吗? )

我读过Context Processors。这似乎正是我想要的,但似乎这可能会导致另一个问题,我必须将context_instance传递给每个render_to_response?这似乎是很多代码重复,我试图尽可能避免这种情况。有没有办法让render_to_response始终采用RequestContext对象而不必总是指定它?

是否还有其他方法可以为每个视图运行一些代码,并且无需始终将数据传递给视图?

4 个答案:

答案 0 :(得分:4)

Django 1.3添加了render快捷方式,该快捷方式与render_to_response相同,但自动使用了RequestContext

答案 1 :(得分:3)

模板适用于此:具有自定义标记和模板继承的变体简单方便。为避免字符串追加,请仅为您的代码使用迷你模板:它名为inclusion tags

答案 2 :(得分:1)

我肯定会去Ajax调用,它就像创建一个小视图一样简单,该视图查询模型中的5个最新帖子,将它们序列化为json或xml数据,并将它们返回到HttpRequest对象中。

答案 3 :(得分:1)

您可以使用direct_to_template代替render_to_response