Django 主从视图插件

2 投票
1 回答
2102 浏览
提问于 2025-04-15 19:11

假设我有三个Django应用,分别是Country(国家)、Social(社交)和Financial(财务)。

Country是一个“主导航”应用。它在一个“索引”页面上列出了所有国家,并在“详情”页面上显示每个国家的详细信息。

每个国家的详细信息里包括它的社交信息(来自社交应用)和财务信息(来自财务应用)。

社交和财务应用都有一个详细信息页面(针对每个国家)。

有没有一种优雅的方法可以把这些子详细信息页面“嵌入”到国家提供的主详细信息页面中呢?这样在每个国家的详情页面上,我就能看到两个标签,分别显示该国家的社交和财务信息。

1 个回答

2

我常用的两种解决方案:

部分模板:
创建一个专门用来渲染“社交”和“财务”的模板,这个模板只需要处理它所用的对象,不需要其他视图中的内容(并且可以使用对象的功能或模板标签来渲染)。这样你就可以轻松地使用{% include %}来引入它(并先设置好需要的变量)。
这个部分视图不会渲染一个完整的HTML页面,而只是渲染一个单独的DIV或你想用的其他HTML元素。如果你还需要一个“仅社交”的页面,可以创建一个页面来渲染头部,然后引入这个部分模板。你可以用类似_template.html的命名来表示部分模板,而用template.html来表示常规模板。

AJAX:
让你的“社交”和“财务”视图知道它们是通过XMLHTTPRequest被调用的(request.is_ajax())。如果是这样,它们只返回一个DIV元素,而不包含周围的所有HTML。这样你的主页面就可以在没有这些内容的情况下渲染,并且可以动态添加这些内容。
使用AJAX有几个好处:你不会在同一个请求中渲染插件视图和整个页面,所以如果你有很多这样的插件视图,主页面会加载得更快,而且你可以让智能的JavaScript只请求相关的插件视图。
此外,你还可以使用普通视图来生成模板中需要的数据(这是在部分模板方法中无法做到的)。

撰写回答