如何从Django中的所有视图传递标准的静态变量?

时间:2009-02-23 01:09:29

标签: django

我正在开发一个博客应用程序,我希望有一个侧边栏,其中包含博客存在的所有月份的列表,以提供指向档案页面的链接。此外,我想在月份更改时自动更新,而不是在模板中对其进行硬编码。当然,据我所知,这意味着我必须在每个视图中计算月份列表,并将其传递到每个视图的每个模板中。

如果可能的话,我想避免这种情况。有没有办法计算列表一次并自动将其应用于每个模板,而不必从每个视图中明确地将其传递到模板中?

4 个答案:

答案 0 :(得分:17)

您的问题有几种可能的解决方案。

如果您真的希望在网站的每个页面上显示此内容,则context processor可能是您的最佳选择。上下文处理器是将数据注入所有模板上下文的基本方法。但请注意,将在每个请求上调用上下文处理器。

另一种解决方案是创建custom template tag并在共享基础模板上使用它,以便为您希望有侧边栏的所有页面使用它。模板标签创建起来有点复杂,但它们更灵活。

使用任一解决方案,您还应该查看Django的cache framework。缓存框架可以很容易地暂时存储您的计算值一段时间,以便为每个请求保存一些工作。

答案 1 :(得分:4)

答案 2 :(得分:0)

Django的模板继承应该涵盖这一点。您可以创建一个处理侧边栏功能的基本模板。您的其他视图会扩展此模板。

模板继承: http://www.djangobook.com/en/1.0/chapter04/#s-template-inheritance

答案 3 :(得分:0)

前面提到的自定义模板标记和template fragment caching的组合应该可以解决问题。