Django - 全局静态文件


添加全局 CSS 文件

我们已经学习了如何在应用程序中添加静态文件static文件夹,以及如何在应用程序中使用它。

但是,如果项目中的其他应用程序想要使用该文件怎么办?

然后我们必须在根目录上创建一个文件夹并将文件放在那里。

仅仅创建一个是不够的static根目录中的文件夹,Django 将修复其余部分。我们必须告诉 Django 在哪里寻找这些静态文件。

首先在项目的根级别创建一个文件夹,这个文件夹可以命名为任何你喜欢的名称,我将命名它mystaticfiles在本教程中:

my_tennis_club
    db.sqlite3
    manage.py
    my_tennis_club/
    members/
    mystaticfiles/

添加 CSS 文件mystaticfiles文件夹,名称是您选择的,我们将其命名为myglobal.css在这个例子中:

my_tennis_club
    db.sqlite3
    manage.py
    my_tennis_club/
    members/
    mystaticfiles/
        myglobal.css

打开 CSS 文件并插入以下内容:

my_tennis_club/mystaticfiles/myglobal.css:

body {
  color: violet;
}

修改设置

你必须告诉 Django 也在以下目录中查找静态文件mystaticfiles根目录中的文件夹,这是在settings.py文件:

添加一个STATICFILES_DIRS列表:

my_tennis_club/my_tennis_club/settings.py:

.
.

STATIC_ROOT = BASE_DIR / 'productionfiles'

STATIC_URL = 'static/'

#Add this in your settings.py file:
STATICFILES_DIRS = [
    BASE_DIR / 'mystaticfiles'
]
.
.

在里面STATICFILES_DIRSlist,您可以列出 Django 应在其中查找静态文件的所有目录。

这个BASE_DIR关键字代表项目的根目录,与/ "mystaticfiles",这意味着mystaticfiles根目录下的文件夹。

搜索顺序

如果有同名的文件,Django 将使用该文件的第一个匹配项。

搜索从列出的目录开始STATICFILES_DIRS,使用您提供的订单。然后,如果没有找到该文件,则继续搜索static每个应用程序的文件夹。


修改模板

现在你有一个全球的整个项目的 CSS 文件,可以从所有应用程序访问该文件。

要在模板中使用它,请使用与在模板中使用的语法相同的语法myfirst.css文件:

使用以下内容开始模板:

{% load static %}

并像这样引用该文件:

<link rel="stylesheet" href="{% static 'myglobal.css' %}">

示例

my_tennis_club/members/templates/template.html:

{% load static %}
<!DOCTYPE html>
<html>
<link rel="stylesheet" href="{% static 'myglobal.css' %}">
<body>

{% for x in fruits %}
  <h1>{{ x }}</h1>
{% endfor %}

</body>
</html>
运行示例 »

没有工作?

那是对的。您需要再次收集静态文件。


收集静态文件

运行collectstatic命令收集新的静态文件:

py manage.py collectstatic

这将产生这样的结果:

You have requested to collect static files at the destination
location as specified in your settings:

    C:\Users\ Your Name\myworld\my_tennis_club\productionfiles

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel:

输入是:

Type 'yes' to continue, or 'no' to cancel: yes

这将产生这样的结果:

1 static file copied to 'C:\Users\ Your Name\myworld\my_tennis_club\productionfiles', 131 unmodified.

这个例子应该有效

启动服务器,示例将运行:

py manage.py runserver

在自己的浏览器中查看结果:127.0.0.1:8000/testing/

示例

my_tennis_club/members/templates/template.html:

{% load static %}
<!DOCTYPE html>
<html>
<link rel="stylesheet" href="{% static 'myglobal.css' %}">
<body>

{% for x in fruits %}
  <h1>{{ x }}</h1>
{% endfor %}

</body>
</html>
运行示例 »