Django Master-Detail View插件

时间:2010-02-12 02:23:38

标签: python django django-templates django-views master-detail

假设我有3个django应用,应用国家,应用社交和应用财务

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

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

社交和财务都有详细视图(针对每个国家/地区)

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

1 个答案:

答案 0 :(得分:2)

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

部分模板:
创建一个模板,用于渲染“社交”和“财务”,它不需要视图中的东西,而不是它正在处理的对象(并使用对象函数或模板标记来渲染它)。 然后你可以轻松地{%include%}(并先设置所需的变量) 此部分视图不会呈现完整的HTML页面,只会呈现您希望使用的单个DIV或其他HTML元素。如果您还需要“仅限社交”页面,则可以创建呈现标题的页面,然后包含部分模板。您可以使用_template.html等常规模板,以及常规模板的template.html。

<强> AJAX:
让您的“社交”和“财务”视图意识到在XMLHTTPRequest(request.is_ajax())中被调用。如果是,则它们只返回一个DIV元素,而不包含所有HTML。通过这种方式,您的母版页可以在没有它的情况下进行渲染,并即时添加该内容 AJAX方式有几个优点:你不会在与整个页面相同的请求上呈现插件视图,所以如果你有很多这些插件视图,主页面加载速度会更快,你可以选择一个智能的javascript要求的相关插件视图 此外,您可以使用普通视图在模板中生成所需的数据(在Partial Templates方法中无法实际执行此操作)。