【问题标题】:Is there a way to have something execute for every view in django?有没有办法为 django 中的每个视图执行某些操作?
【发布时间】:2011-08-29 01:19:50
【问题描述】:

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

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

对于最新更新部分,我只想在每次呈现页面时获取从帖子到 Web 应用程序的最后 5 次更新。我曾想过在页面加载后通过 ajax 调用让侧边栏做到这一点,但我认为这可能不是我最好的选择。

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

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

是否有任何其他方法可以实现为每个视图运行一些代码并消除始终将数据传递给视图的需要?

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    【讨论】:

    • 很高兴知道这一点。出于某种原因,我认为 render 是一个较低级别的功能......我一定是在某一时刻误读了文档。
    【解决方案2】:

    模板是一个合适的地方:带有自定义标签和模板继承的变体简单方便。为避免附加字符串,只为您的标签使用迷你模板:它被称为inclusion tags

    【讨论】:

      【解决方案3】:

      我肯定会使用 Ajax 调用,它就像创建一个小视图一样简单,它可以查询模型以获取 5 个最新帖子,将它们序列化为 json 或 xml 数据,然后在您的 HttpRequest 对象中返回它们。

      【讨论】:

        【解决方案4】:

        您可以使用direct_to_template 代替render_to_response

        【讨论】:

          猜你喜欢
          • 2014-12-04
          • 2019-09-07
          • 1970-01-01
          • 2012-10-23
          • 2013-05-12
          • 2019-12-31
          • 1970-01-01
          • 2021-05-29
          • 2013-10-10
          相关资源
          最近更新 更多