我注意到我开始大量使用include
模板。我的一个模板文件中有20多个包含标签。
其中一些用于模式对话框,而模式对话框又包含用于不同表单字段集的模式对话框。我还使用了基本相同的按钮,但具有不同的数据属性,因此也可以使用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">
希望这个问题不太广泛。我只是想避免可能的不良做法。
答案 0 :(得分:1)
过于分散的模板会影响您的性能,但这并不是因为Django会加载文件。
使用默认设置,Django在DEBUG=False
时缓存模板文件:
django.template.loaders.cached.Loader
...
如果未安装
OPTIONS['loaders']
,则会自动启用此加载程序 指定并且OPTIONS['debug'
]为False(后一个选项默认为DEBUG
的值。)
恕我直言,拥有很多包含本身并不是一个坏习惯。另一种选择是重复代码,这违反了DRY原则。
如果您发现自己在一个模板中多次包含同一模板,则可能需要考虑使用custom inclusion tag。
如果您真的担心性能,请研究缓存,尤其是模板片段缓存。
答案 1 :(得分:0)
根据Django documentation:
您可以使用扩展和阻止
几个例子:
在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 %}