2012-08-08 73 views
4

我想为我的web应用创建一个侧栏。它包含以下内容:与django,布局或视图的边栏?

  • 搜索栏
  • 的标签列表
  • 联系最近的帖子(含年份和月份)

我想包括这个侧边栏在每个站点/视图。所以我的第一个猜测是它属于一个布局。 但它也是动态的,据我所知布局是静态的。

如何避免我的视图/布局冗余,并仍然在每个网站上都有侧边栏?

回答

3

要将上下文数据传递给多个模板,您在django中有不同的选项;你既可以:

  • 做一个Template Tag可以拉的相关数据并使其在每次需要(或只是将其插入一个基础模板,并使用template inheritance)模板重用。

  • 使用context processor:它将与每个请求一起调用,并将数据添加到使用RequestContext的每个视图的上下文中。

  • 使用Django的基于类的视图,您可以让所有视图从将视图添加到数据的基本视图继承。

如果你需要从你的数据库中,我宁愿用一个模板标签比使用上下文处理器,因为它会被调用视图去的数据。

+1

这当然是基于地方类视图照耀功能同行。 – 2012-08-08 10:47:25

+0

@JoshSmeaton:完全同意这一点,但在文档和演示文稿中很少提及使用具有继承的基于类的视图将数据添加到多个视图的上下文中的优势! – 2012-08-08 11:02:14

1

对于侧边栏中的静态内容(例如搜索表单),它的直接模板/ html。

对于像标签列表这样的动态内容,最近的帖子: 一旦进入模板,您已经确定了要放置此信息的元素(div或其他),您可以使用自定义模板标记填充其内容定制情境处理器。

就你而言,如果内容并不真的取决于请求参数或url,那么模板标签将是更好的选择。

参考Custom template tagCustom Context Processor