26

我有一个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 %}

问题是由于静态变量,额外的 javascript 不会加载。即使我扩展了模板内部的base.html,它也不会加载{% load staticfiles %}。最后,我解决了{% load staticfiles %}index.html处再添加一个的问题。

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

4

3 回答 3

26

根据 Django 的最新文档,这样做是为了可维护性和完整性

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

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

这是为了可维护性和健全性而设计的功能。

于 2017-01-27T14:03:46.020 回答
3

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

于 2013-01-03T15:16:45.973 回答
0

您需要{% load staticfiles %}在任何希望进行 url 扩展的地方都需要它是合乎逻辑的。base.html如果您在两个&中都发生了这种情况,则index.html必须在两个地方都包含它(正如您已经想到的那样)。

于 2014-02-23T17:10:32.573 回答