在Django中使用静态文件的扩展模板

3

我将使用django的extend标签来扩展基本模板"header.html",以获取一些新的数据。

"header.html":

<!DOCTYPE html>
{% load staticfiles %}
<link href='https://fonts.googleapis.com/css?family=Roboto:400,500' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="{% static 'style.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'font-awesome.min.css.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'bootstrap.min.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'jquery-ui.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'css/buttons.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'css/jquery.switchButton.css' %}"/>
<script src="{% static 'jquery-1.11.3.min.js' %}"></script>
<script src="{% static 'jquery-ui.js.js' %}"></script>
<script src="{% static 'jquery.dataTables.min.js' %}"></script>
<script src="{% static 'dataTables.bootstrap.min.js' %}"></script>
<script src="{% static 'common.js' %}"></script>
<html lang="en">
<head>
<div id="header">
    <div id='topMenuDiv'>
        <a href='/search' class='fa '>BROWSE MOVIES</a>
    </div>
</div>
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

我有一个home.html文件

{% extends "header.html" %}
{% block content %}
    <script src="{% static 'index.js' %}"></script>
{% endblock %}

现在,如果我在home.html中包含{% load staticfiles %},那么这个方法就能工作,但是不包括它会出现错误——无效的块标签:“static”。 我想知道是否有一种方法可以在不使用{% load staticfiles %}的情况下包含静态文件“index.js”,因为这将再次加载静态文件。

你正在使用哪个版本的Django? - Mondongo
Django 版本 = 1.8.7 - dnit13
1个回答

6

{% load staticfiles %} 只会加载模板标签库staticfiles的代码。它不会将所有静态文件加载到Django模板中。模板标签staticstaticfiles模板标签库的一部分,因此Django模板需要知道static的代码来自何处。

您可以在任何模板标签上调用load,甚至是自定义的标签。这类似于Python中的伪代码from staticfiles import static

请参阅Django文档获取详细信息。


2
不,我已经告诉过你了,“load”不会加载静态文件,它只会加载模板标签“static”,这样你就可以在当前页面的任何位置使用“{% static 'xyz' %}”了。 - Shang Wang
1
只需执行{% load staticfiles %},然后您就可以使用{% static 'index.js' %}来访问index.js,只要您的index.js在您的STATICFILES_STORAGE目录中即可。 - Shang Wang
是的,但这样不就像导入整个nltk库一样吗?我可以使用“from nltk import nltk.something”来实现。 - dnit13
1
当Python加载某个模块时,它只会执行一次。所以是的,它将加载“staticfiles”模块,但你担心什么? - Shang Wang
2
据我所知,静态文件中只有{% static %}标签,因此无论您加载整个内容还是仅加载一个标签都没有关系。 - GwynBleidD
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接