在Django中加载静态文件

时间:2019-03-21 21:45:07

标签: css django

我尝试了大约2个小时,以弄清为什么我的Django静态文件未加载。 这是我在settings.py中的静态文件配置:

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_in_env')]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

这是我的base.py的一部分:

{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'styles/bootstrap4/bootstrap.min.css' %}">
<link href="{% static 'plugins/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css'%}%">

这是我的目录树:

D:.
├───.vscode
├───blog
│   ├───migrations
│   │   └───__pycache__
│   └───__pycache__
├───courses
│   ├───migrations
│   │   └───__pycache__
│   └───__pycache__
├───lingua
├───main
│   ├───migrations
│   │   └───__pycache__
│   └───__pycache__
├───pia
│   └───__pycache__
├───posts
│   ├───migrations
│   │   └───__pycache__
│   └───__pycache__
├───static
│   ├───admin
│   │   ├───css
│   │   │   └───vendor
│   │   │       └───select2
│   │   ├───fonts
│   │   ├───img
│   │   │   └───gis
│   │   └───js
│   │       ├───admin
│   │       └───vendor
│   │           ├───jquery
│   │           ├───select2
│   │           │   └───i18n
│   │           └───xregexp
│   ├───images
│   ├───js
│   ├───plugins
│   │   ├───easing
│   │   ├───font-awesome-4.7.0
│   │   │   ├───css
│   │   │   ├───fonts
│   │   │   ├───less
│   │   │   └───scss
│   │   ├───OwlCarousel2-2.2.1
│   │   ├───parallax-js-master
│   │   ├───progressbar
│   │   └───video-js
│   └───styles
│       └───bootstrap4
├───static_in_env
└───templates
    ├───blog
    ├───courses
    ├───main
    └───posts

您能帮我弄清楚为什么静态文件无法正常工作吗。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您的代码将在目录 static_in_env 中查找您的 css 文件,该目录由您选择的 STATICFILES_DIRS 参数给出。该列表是静态文件的来源,因此将您希望在项目中使用的所有 css 脚本等的路径添加到此列表中。一旦您调用 collectstatic,这些文件将被收集到 STATIC_ROOT 文件夹中(最初应该是空的),最后,可以通过 STATIC_URL 在(测试或生产)服务器上访问,e。 G。通过您的浏览器。

我想您现在已经自己弄清楚了,但我会尝试在您的代码中将 static_in_env 替换为 static,因为这是 styles 的父级,并且plugins 显示在您的模板中。另一方面,您可能希望为每个应用创建 statictemplate 子文件夹,但这取决于您。

顺便说一句,根据我自己的经验:确保您的 BASE_DIR 参数准确指向您想要的位置。在创建名为“mysite”的项目(父项将包含 mysite/mysite 和子项 manage.py)时,您通常会得到两个相同的目录 (settings.py),我总是觉得这有些令人困惑。这能解释您提到的 STATIC_ROOT 错误吗?

如果 Django documentation 在这方面更主动一点,那可能不会有什么坏处;)

答案 1 :(得分:0)

您的STATICFILES_DIR看起来不正确。

尝试一下:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
YOURAPP_DIR = os.path.join(BASE_DIR, 'yourapp')

STATIC_URL = '/static/' 

STATICFILES_DIR = [
    os.path.join(YOURAPP_DIR, 'static')
]

yourapp是应用程序(而不是项目)的名称。

现在在您的模板上,您可以像这样访问它们:

{% load static %}

<link src="{% static 'someFile.css' %}">

如果css文件夹中有一个名为static的文件夹,则可以按以下方式访问该文件夹中的文件:

<link src="{% static 'css/someFile.css' %}">