Django:频繁使用包含模板标签 - 多少才算太多?
Posted
技术标签:
【中文标题】Django:频繁使用包含模板标签 - 多少才算太多?【英文标题】:Django: Frequent use of include template tag - how much is too much? 【发布时间】:2019-06-03 05:03:23 【问题描述】:我注意到我开始大量使用include
模板。我的一个模板文件有 20 多个包含标签。
其中一些用于模式对话框,而这些对话框又包含不同的表单字段集。我也使用具有不同数据属性的基本相同的按钮,所以这些也是使用include
标签完成的。我与 include 一起使用的一些“片段”只有大约五行 html 代码。
我担心这是否太多并且会对性能产生负面影响(因为 Django 会加载其他文件等)
例如,whis 是我与 include
一起使用的 HTML 片段之一的标记:
<div class="form-group">
<input type="url" class="form-control" id="video-link-input" name="video_link"
placeholder="YouTube link">
</div>
<input type="hidden" id="video_id" name="video_id" value="">
<img class="img-fluid img-thumbnail" id="video-img-preview">
希望问题不要太宽泛。我只是想避免可能的不良做法。
【问题讨论】:
【参考方案1】:过度碎片化的模板会影响你的性能,但不是因为 Django 加载文件。
默认设置下,Django在DEBUG=False
时缓存模板文件:
django.template.loaders.cached.Loader
...
如果没有
OPTIONS['loaders']
,这个加载器会自动启用 指定且OPTIONS['debug'
] 为 False(后一个选项默认为DEBUG
) 的值。
恕我直言,包含很多内容本身并不是一个坏习惯。另一种方法是重复代码,这违反了 DRY 原则。
如果您发现自己在一个模板中多次包含同一个模板,您可能需要考虑使用custom inclusion tag。
如果您真的担心性能,请查看缓存,特别是模板片段缓存。
【讨论】:
我想使用 include 来分隔我的代码部分,因为我的代码看起来太复杂了。出于这个原因使用包含是否不好?【参考方案2】:根据 Django documentation:
使用 % block % 比使用 % include % 更快 高度碎片化的模板,由许多小块组装而成,可以 影响性能您可以使用 extends 和 block
几个例子:
在base.html
我使用这些块
...
% block navbar %
% endblock %
% block sidebar %
% endblock %
% block searchbar %
% endblock %
% block content %
% endblock %
% block footer %
% endblock %
...
现在我将base.html
扩展为login.html
。说我的login.html
只需要navbar
、content
和footer
% extends 'base.html' %
<h1>Login </h1>
% block navbar %
This is my navbar
% endblock %
% block content %
Here is my login form
% endblock %
% block footer %
This is footer
% endblock %
现在我将base.html
扩展为home.html
。说我的home.html
需要navbar
、sidebar
、searchbar
、content
和footer
% extends 'base.html' %
<h1>Home page </h1>
% block navbar %
This is my navbar
% endblock %
% block sidebar %
This is sidebar
% endblock %
% block searchbar %
% endblock %
% block content %
This is homepage contents. This will not render which you use in login.html **content** block
% endblock %
% block footer %
% endblock %
【讨论】:
是的,我将这些标签用于更大的 HTML。例如,我有带有基本标记、样式、JS 的 base.html,然后将其用作我更具体的模板的基础。以上是关于Django:频繁使用包含模板标签 - 多少才算太多?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“include”标签在 Django 中动态包含模板