使用包含标签插入.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视图的主要内容,如果未能解决你的问题,请参考以下文章