【问题标题】:Calling small app in template在模板中调用小应用程序
【发布时间】:2009-11-20 17:54:20
【问题描述】:

假设我有一个网站,其中包含一个列出 10 个最新成员的小型应用程序,或者类似的动态。我希望在每一页上查看它,也许在侧边栏中。我该怎么做呢。

我对此事的看法。我可能还没有得到整个 django 的东西,但是当我有一个像 /foo/ 这样的 url 调用视图栏时 - 但是我必须从这个视图发送什么信息到模板。是否每个视图都必须将信息发送到模板(以便我可以查看我的应用程序)或者是否可以从模板中调用它。

我试图通读文档,但似乎我无法理解这一点。

【问题讨论】:

    标签: django django-templates views


    【解决方案1】:

    从其他应用程序提供“10 个最新成员”类型信息的常用方法是通过模板标签。请参阅 James Bennett 撰写的 this article 最佳实践(但请注意,它有点过时,因为它是在 inclusion_tagsimple_tag 快捷方式可用之前编写的)。

    【讨论】:

      【解决方案2】:
      1. 创建可以在页面上调用的模板标签
      2. 创建上下文处理器并将额外的上下文变量注入每个页面加载

      我确信还有其他方法可以做到这一点,但这些可能是最合乎逻辑的两种。第一个为您提供更多功能并且将浪费更少的处理时间(对于您不想显示数据的页面),但上下文处理器更易于编写(您不必向后弯腰来取悦模板标签神)。

      两者都是很有价值的事情,所以你去吧。去学习吧!

      【讨论】:

      • 上下文处理器应该是#1。 “确实有效”(如查询)的模板标签可能比上下文处理器更快地变成难以测试和调试的性能问题。
      • 完全不同意 S.Lott。上下文处理器严格用于低影响的事情 - 提供可用设置、媒体 url 之类的东西。如果您需要工作,模板标签是您的最佳选择。使用上下文处理器执行此操作,如果您突然需要一个没有该查询的页面或部分怎么办?它正在所有页面上完成,并且无法关闭它。
      • 当然,如果他们在模板变量处理代码中修复了 _resolve_lookup 函数,以便它正确处理第一级可调用对象,那么您可以创建一个柯里化函数并将其粘贴到上下文中,它只会做如果您实际调用它,则工作。这是我必须在每个项目中不断制作的 10 行补丁。或者,使用 jinja2 进行模板化,只需在模板中需要它的地方执行 python 表达式。
      【解决方案3】:

      “是否每个视图都必须将信息发送到模板(以便我可以查看我的应用程序)”

      是的。

      “有没有办法从模板中调用它。”

      没有。

      您的视图只是函数。函数可以调用其他函数。这就是普通的好设计。你仍然可以在 Django 中做普通的优秀设计。

      您确实有能力提供“上下文”。这仍然在视图中完成,以便为模板提供额外的“上下文”。请参阅 http://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors 以编写您自己的上下文处理器。

      除了将视图提供的对象渲染成 HTML(或 XML)之外,模板中没有做任何事情(几乎没有做任何事情)。


      如果您的页面融合了许多小应用程序的内容,那么您就有两层应用程序。

      • 独立应用。

      • 依赖于复合应用或独立应用的复合应用。

      您的复合应用可以调用其他应用视图函数来收集数据。

      您的复合应用模板可以包含其他应用模板元素来呈现该数据。

      您拥有 Python 的所有功能,可以将独立的应用程序分解为“数据生产”功能、视图功能、模板组件和最终页面模板。

      独立的应用页面将使用视图功能和模板。视图函数将使用数据生产函数。模板将使用模板组件。

      分解仍然有效,即使在 Django 中也是如此。

      【讨论】:

      • 什么都没有?模板标签做一些事情。
      • 好吧,我害怕那个。但是你会怎么做。您有一些像这个最新用户这样的小型应用程序,也许还有一些其他用户。您将如何构建它以使其变得容易。我的意思是干的和所有的。您是否会创建一个计算最新用户的函数,并从您的视图中调用它,然后将数据发送到模板。如果是这样,这是如何以最“明智”的方式完成的?顺便谢谢你的回答
      • @Oli:模板标签可以迭代并做出简单的决定。它们不应该替代正确的视图逻辑。是的,他们可以做很多事情。但性能通常会受到影响。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多