为什么要为每个模板加载静态文件,即使它已被扩展?

问题描述 投票:17回答:3

我有一个base.html文件,其中包含一些“随机”HTML代码,我有以下代码:

{% load staticfiles %}
<!DOCTYPE html>
<html>
   <head>
      ... 
     {% block extra_js_top %}{% endblock %}
   </head>
   ...
</html>

在我的index.html文件中,我扩展了base.html并加载了一些额外的javascript文件:

{% extends "base.html" %}
...
{% block extra_js_top %}
   <script type="text/javascript" src="{% static "js/somejs.js" %}"></script>
{% endblock %}

问题是因为静态var而无法加载额外的javascript。即使我扩展了在模板中有{% load staticfiles %}的base.html,它也不会加载。最后我解决了在index.html添加一个{% load staticfiles %}的问题。

我的问题是为什么我们应该为我们使用的每个模板添加{% load staticfiles %},即使我们扩展已经拥有它的文件?

python django static django-templates
3个回答
17
投票

根据Django最新的documentation,这是为了可维护性和理智性

加载自定义标记或过滤器库时,标记/过滤器仅可用于当前模板 - 而不是模板继承路径中的任何父模板或子模板。

例如,如果模板foo.html具有{%load humanize%},则子模板(例如,具有{%extends“foo.html”%}的模板)将无法访问人性化模板标签和过滤器。子模板负责自己的{%load humanize%}。

这是为了可维护性和理智性的特征。


3
投票

因为这是模板标签的工作方式。您需要为每个使用它们的模板文件加载每个库。


0
投票

在你想要网址扩展的地方你需要{% load staticfiles %}是合乎逻辑的。如果你在base.htmlindex.html都有这种情况,你必须在两个地方都包括它(正如你已经想到的那样)。

© www.soinside.com 2019 - 2024. All rights reserved.