假设我有3个django应用,应用国家,应用社交和应用财务。
国家/地区是'主导航'应用。它列出了“索引”视图中的所有国家/地区,并在其“详细信息”视图中显示了每个国家/地区的详细信息。
每个国家/地区的详细信息包括其社交详细信息(来自社交应用)及其财务详细信息(来自财务应用)。
社交和财务都有详细视图(针对每个国家/地区)
是否有一种优雅的方法可以将这些子详细信息视图“插入”到国家/地区提供的主详细信息视图中?因此,对于每个国家/地区详细信息页面,我会看到2个选项卡,显示该国家/地区的社交和财务详细信息。
答案 0 :(得分:2)
我用于此问题的2个常用解决方案:
部分模板:
创建一个模板,用于渲染“社交”和“财务”,它不需要视图中的东西,而不是它正在处理的对象(并使用对象函数或模板标记来渲染它)。
然后你可以轻松地{%include%}(并先设置所需的变量)
此部分视图不会呈现完整的HTML页面,只会呈现您希望使用的单个DIV或其他HTML元素。如果您还需要“仅限社交”页面,则可以创建呈现标题的页面,然后包含部分模板。您可以使用_template.html等常规模板,以及常规模板的template.html。
<强> AJAX:强>
让您的“社交”和“财务”视图意识到在XMLHTTPRequest(request.is_ajax())中被调用。如果是,则它们只返回一个DIV元素,而不包含所有HTML。通过这种方式,您的母版页可以在没有它的情况下进行渲染,并即时添加该内容
AJAX方式有几个优点:你不会在与整个页面相同的请求上呈现插件视图,所以如果你有很多这些插件视图,主页面加载速度会更快,你可以选择一个智能的javascript要求的相关插件视图
此外,您可以使用普通视图在模板中生成所需的数据(在Partial Templates方法中无法实际执行此操作)。