Django 配置静态文件

最重要的:Django 要在开启 debug 模式才会加载静态文件,关闭 debug 情况下需要使用解析服务(个人使用 Apache)

运行环境:

系统:Windows10
Python:3.6
Django:2.0.2
Apache:2.4

问题:

在使用 Django 关闭 Debug 模式后,想生成一个 404 页面,涉及到静态文件加载的问题。

解决方法:

官方文档说明:

官方文档

实际操作:

在 Django 里需要编写的:

settings.py 文件中相关代码及说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

STATIC_URL = '/static/'

# STATIC_ROOT设置运行python manage.py collectstatic命令后存放所有搜集到的静态文件(包括各个app里静态文件)的目录,可以方便apache部署
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

# STATICFILES_DIRS设置一些存放公共静态文件的目录,不能和STATIC_ROOT的目录一样,也可以不写
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "common_static"),
)

# 这个是默认设置,Django 默认会在 STATICFILES_DIRS中的文件夹 和 各app下的static文件夹中找文件
# 注意有先后顺序,找到了就不再继续找了
STATICFILES_FINDERS = (
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder"
)

可以把静态文件放在 app 的 static 文件夹下,或者 STATICFILES_DIRS 目录中。
我的目录结构:
我的目录结构
我把 common_static(公共静态文件夹)、collected_static(搜集的静态文件夹)放在项目目录下,把 static(app 的静态文件夹)放在 app 目录下

在 DEBUG = True 的情况下,使用 runserver 命令后,可以直接访问:static/movieWebSite/images/bg.jpg 来访问该图片。

同样,像官方文档里所说:

在 settings.py 文件中的 INSTALLED_APPS 项下一定要有 django.contrib.staticfiles。

在 HTML 中需要编写的:
1
2
{% load static %}
<link rel="stylesheet" href="{% static 'movieWebSite/css/font-awesome.min.css' %}" media="all" />
最后,要部署到 Apache 上

先使用 python manage.py collectstatic 命令搜集静态文件,可以方便 apache 部署
在 httpd.conf 文件中,增加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<VirtualHost *:80>

Alias /media/ /path/to/media/ #此为meida文件的设置,可以注释掉
Alias /static/ collected_static目录的位置 #(eg:D:/allFile/Python_Project/Web/Movie/collected_static/)<strong><span style="font-size:14px;">(<span style="color:#ff0000;">注意最后需要一个'/'</span>)</span></strong>

<Directory /path/to/media>                  #此为media目录的设置,可以注释掉
Require all granted
</Directory>

<Directory collected_static目录的位置>       #(eg:D:/allFile/Python_Project/Web/Movie/collected_static)
Require all granted
</Directory>

WSGIScriptAlias / wsgi文件位置               #(eg:D:/allFile/Python_Project/Web/Movie/Movie/wsgi.py)
<Directory wsgi文件所在目录位置>              #(eg:D:/allFile/Python_Project/Web/Movie/Movie)
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>

重启 Apache 服务器就 OK 了。

闲谈:

如果静态文件加载不出来,可以用 python manage.py findstatic (staticfile) 命令来查找静态文件位置是否放置正确。

其实发现官方文档才是最有用的。

------ 本文结束------

本文标题:Django 配置静态文件

文章作者:jklf5

发布时间:2020年02月18日 - 19:14

最后更新:2020年02月19日 - 21:00

原始链接:https://jklf5.xyz/2020/02/18/Django配置静态文件/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。