Django主从视图插件


问题内容

假设我有3个Django应用, 国家(地区)社交金融 应用。

国家/地区是“主导航”应用。它在“索引”视图中列出了所有国家/地区,并在“详细信息”视图中显示了每个国家/地区的详细信息。

每个国家/地区的详细信息包括其社交详细信息(来自社交应用程序)和财务详细信息(来自财务应用程序)。

社会和金融都有详细视图(针对每个国家)

是否有一种优雅的方法将这些子详细信息视图“插入”到国家/地区提供的主详细信息视图中?因此,对于每个国家/地区的详细信息页面,我将看到2个标签,分别显示该国家/地区的社会和财务详细信息。


问题答案:

我用于此问题的2个常见解决方案:

局部模板:
创建一个模板来呈现“社交”和“财务”模板,该模板不需要视图中的东西,除了它正在处理的对象之外(并使用对象功能或模板标签进行渲染)。那么您可以轻松地{%include%}它(并先设置所需的变量)。
此局部视图不会呈现完整的HTML页面,而仅呈现您要使用的单个DIV或其他HTML元素。如果您还需要“仅社交”页面,则可以创建一个呈现标题的页面,然后包含部分模板。您可以将_template.html之类的约定用于部分模板,并将template.html之类的用于常规模板。

AJAX:
使您的“社交”和“财务”视图意识到在XMLHTTPRequest(request.is_ajax())中被调用。如果它们是,则它们仅返回DIV元素,而不会包含所有HTML。这样,您的母版页可以在没有它的情况下呈现,并即时添加该内容。
AJAX方式有几个优点:您不会在整个页面的同一请求上呈现插件视图,因此,如果您拥有许多这样的插件视图,则母版页将加载得更快,并且您可以让智能javascript仅选择要求的相关插件视图。
另外,您可以使用普通视图在模板中生成所需的数据(在Partial Templates方法中实际上无法做到)。