2015-12-05 30 views
1

我有一个第三方应用程序(我们称之为应用程序A),在其views.py中,它使用上下文处理器将数据发送到特定的URL。它发送的数据在其模板中用于确定导航栏的样子。例如,如果数据库中存在A.project条目,它将在其模板中显示<i> Projects </i>在Django中使用模板标签检索数据是不好的做法吗?

现在我想扩展该应用程序,并使用它使用的导航栏,但是在博客应用程序是第三方应用程序的位置添加一个额外的参数blog。现在的问题是,无论你何时转到与博客应用关联的网址,例如(/blog),从导航栏的应用不限项目将丢失,因为从博客应用程序发送的情况下是不同的,从应用A.

我也许可以创建自定义的模板标签来检查是否A.project丢失的数据,等等,但我不确定这是否是最好的方法。

有没有更好的方法呢?

+1

你需要小心的是混合逻辑到这是你会在做的危险是什么看法的事情。但我恐怕现在想不到一个简单的解决方案 – Sayse

回答

1

如果你正在寻找的是有一些提示天气的一些数据或者在模板渲染时存在的一些应用程序,你可以使用一个模板,背景处理器,因为这是他们的 - 装东西到每一个模板。

我肯定不会推荐实施的模板标签来获取数据,这将打破MVC规则一次,但随后试图调试缓慢的数据库查询,并像其他的东西,你可能会遇到麻烦。

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

刮胡子该处理的一段时间,你可以使用某种手动缓存与适当的失效方式。

如果您使用基于类的视图,另一种途径是实现一个mixin,它只会将需要的数据添加到上下文中(在get_context_data方法中)。如果您正在执行此操作,请确保致电super以获取您通常扩展的类基本视图的上下文。

相关问题