在Django中使用模板标签检索数据是不好的做法吗?

时间:2015-12-05 21:00:03

标签: python django

我有一个第三方应用程序(我们称之为应用程序A),在其views.py中,它使用上下文处理器将数据发送到特定网址。它发送的数据在其模板中用于确定导航栏的样式。例如,如果数据库中存在A.project条目,它将在其模板中显示<i> Projects </i>

现在我想扩展该应用,并使用它使用的导航栏,但添加一个额外的参数blog,其中博客应用是第三方应用。问题在于,现在每当您转到与博客应用相关联的网址时,例如, (/blog),导航栏中应用A的任何项目都将丢失,因为从博客应用发送的上下文不同,并且缺少来自应用A的数据。

我可以创建自定义模板标签来检查是否存在A.project等,但我不确定这是否真的是最好的方法。

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

如果您要查找的是在模板渲染时存在某些数据或某些应用程序,那么您可以使用模板上下文处理器,因为这就是它们的用途 - 将内容加载到每个模板中

我绝对不建议实现模板标签来检索数据,这会破坏MVC规则一次,但是在尝试调试慢速数据库查询和其他类似的东西时可能会遇到麻烦。

如果您在上下文处理器中执行了一些数据库查询,请记住,每次呈现模板时都会执行这些查询,即使它不需要该数据。

为了节省一些处理时间,你可以使用某种手动缓存和适当的失效方案。

如果您使用基于类的视图,另一种方法是实现一个mixin,它只需将您需要的数据添加到上下文中(在get_context_data方法中)。如果您这样做,请务必调用super以获取您通常扩展的类基本视图的上下文。