我正在开发一个博客应用程序,我希望有一个侧边栏,其中包含博客存在的所有月份的列表,以提供指向档案页面的链接。此外,我想在月份更改时自动更新,而不是在模板中对其进行硬编码。当然,据我所知,这意味着我必须在每个视图中计算月份列表,并将其传递到每个视图的每个模板中。
如果可能的话,我想避免这种情况。有没有办法计算列表一次并自动将其应用于每个模板,而不必从每个视图中明确地将其传递到模板中?答案 0 :(得分:17)
您的问题有几种可能的解决方案。
如果您真的希望在网站的每个页面上显示此内容,则context processor可能是您的最佳选择。上下文处理器是将数据注入所有模板上下文的基本方法。但请注意,将在每个请求上调用上下文处理器。
另一种解决方案是创建custom template tag并在共享基础模板上使用它,以便为您希望有侧边栏的所有页面使用它。模板标签创建起来有点复杂,但它们更灵活。
使用任一解决方案,您还应该查看Django的cache framework。缓存框架可以很容易地暂时存储您的计算值一段时间,以便为每个请求保存一些工作。
答案 1 :(得分:4)
您需要模板上下文处理器
Django - having middleware communicate with views/templates
http://docs.djangoproject.com/en/dev/ref/templates/api/?from=olddocs#id1
答案 2 :(得分:0)
Django的模板继承应该涵盖这一点。您可以创建一个处理侧边栏功能的基本模板。您的其他视图会扩展此模板。
模板继承: http://www.djangobook.com/en/1.0/chapter04/#s-template-inheritance
答案 3 :(得分:0)
前面提到的自定义模板标记和template fragment caching的组合应该可以解决问题。