使用包含标签插入.html的嵌套Django视图

Posted

技术标签:

【中文标题】使用包含标签插入.html的嵌套Django视图【英文标题】:Nested Django view with .html inserted using include tag 【发布时间】:2019-08-23 21:28:03 【问题描述】:

我想知道是否有人对在 Django 中的视图中渲染视图有任何最佳实践建议,或者具有类似效果的东西,其中两个视图都可以有自己的上下文和方法。

我目前正在使用内置的包含标签呈现下拉菜单。所以嵌套的 .html 使用与页面其余部分相同的 Django 视图。所有上下文都来自主视图,如下所示。我想为这个下拉列表提供自己的 Django 视图,这样我只在打开下拉列表时执行某些数据库查询和其他计算。

<div class="container-fluid">
  <div class="row">
    <div class="col-6">
    </div>
    <div class="col-2 d-flex justify-content-center">
        % include nested.html %
    </div> ... 

如果有这方面经验的人可以让我知道他们的想法,并且尝试将其分成 2 个视图是否有意义,那就太好了。

总结。我想知道我是否可以使用类似于包含 Django 标记的东西以某种方式呈现单独的视图。这样我就可以控制视图的呈现位置。

【问题讨论】:

你能否提供一些代码,因为我不明白你想要什么:) 我不会发布实际代码,因为它很长而且问题更具推测性。相反,我将提供一些示例代码,并尝试更详细地指出我想做的事情。 您需要一个自定义包含标签。 @DanielRoseman 谢谢,这就是我想要的。如果您提交作为答案,我会接受。 【参考方案1】:

下面我概述了我对下面解决方案的实现,使用了我的问题的 cmets 中建议的自定义包含标签。

您可以在项目目录中制作自定义模板标记文件,然后将它们注册到模板库中。例如:

template_tags.py

from django import template
from users.models import Organisation
register = template.Library()

@register.inclusion_tag('nested.html', takes_context=True)
def nested_template(context, param=None): #param to pass variables from main view 
    context.update(
        'data_list': get_data_list(param)
        'organisation_id': param,
    )
    return context
    def get_data_list(self,param):
        data_list = ... #do all queries needed.
        return data_list

在模板标签中,你指向你的nested.html,它会做你需要做的任何事情。例如:

nested.html

% for data in data_list %
    <h4> data </h4>
% endfor %

然后将模板包含在您的主视图模板中:

% load nested_template % #at the top or anywhere before using it

% nested_template param % #where you want the template included

希望足够清楚,可以帮助某人

【讨论】:

以上是关于使用包含标签插入.html的嵌套Django视图的主要内容,如果未能解决你的问题,请参考以下文章

Django怎么使一个页面嵌套另一个页面

art-template 怎么使循环里面嵌套

Django 1.10 模板在其父级之外呈现嵌套的 HTML 标签

Django:使用视图来处理模板标签的逻辑?

在另一个模板中显示来自 Django 视图的 HTML 表

django-模板