在Django中加载静态文件

alen0pnh  于 2023-03-31  发布在  Go
关注(0)|答案(3)|浏览(131)

我花了大约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

你能帮我弄清楚为什么静态文件不起作用吗?

3qpi33ja

3qpi33ja1#

你的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' %}">

如果您的static文件夹中有一个名为css的文件夹,您可以像这样访问该文件夹中的文件:

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

7gcisfzg2#

如果我理解正确的话,你的代码将在static_in_env目录中查找你的css文件,这是由你选择的STATICFILES_DIRS参数给出的。这个列表是你的静态文件的源,因此将你想在你的项目中使用的所有css脚本的路径添加到这个列表中。一旦你调用collectstatic,这些文件将被收集到STATIC_ROOT文件夹(最初应该是空的)中,并且最终可以通过STATIC_URL在(测试或生产)服务器上访问,例如通过您的浏览器。
我想你现在已经自己弄明白了,但是我会尝试在你的代码中用static替换static_in_env,因为这是你的模板中显示的stylesplugins的父文件夹。另一方面,你可能希望为每个应用创建statictemplate子文件夹,但这取决于你。
顺便说一句,根据我自己的经验:确保你的BASE_DIR参数指向你想要的地方。当你创建一个名为“mysite”的项目时,你通常会得到两个相同的目录(mysite/mysite)(父目录包含manage.py,子目录包含settings.py),我总是觉得这有点令人困惑。这能解释你提到的STATIC_ROOT错误吗?
如果Django文档在这方面更积极一点的话,可能不会有什么坏处;)

xu3bshqb

xu3bshqb3#

对静态目录使用元组:

STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static_in_env'),)

在基本文件中你有错误,使用这个作为第二个链接:

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

相关问题