django 引用css失效_Django 知识库:管理静态文件

Django 水友群里问得最多的,就是找不到静态文件的问题了,各种姿势的 404 not found 层出不穷。

到底应该怎么管理静态文件,请看下面的解答,希望对你有帮助。

Django Version >= 3.0

开发阶段

方案一

首先请保证打开调试模式:

# settings.py

DEBUG = True

开发阶段时这个选项通常都是 True ,以便获得框架提供的 Debug 功能。

然后请确保注册了如下应用:

# settings.py

INSTALLED_APPS = [
    ...
    'django.contrib.staticfiles',
    ...
]

这是 Django 内置的也是默认注册的 App,功能是帮你管理静态文件。

接下来,还需要配置这些:

# settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

这样就可以了,你甚至都不需要配置专门的路由,因为 contrib.staticfiles 帮你搞好了。

接下来就可以创建 static/ 目录,并且把静态文件都放到这个目录下。注意这个 static/ 目录直接位于项目的根目录下,与 templates/ 、以及其他你创建的 app 是同一级的。

然后就可以愉快的在模板中引用静态文件了,比如:

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

<script src="{% static 'world.js' %}"></script>

<img src="{% static 'hexie.png' %}" alt="">

方案二

另一个种方法是不依赖 contrib.staticfiles ,手动给静态文件提供服务:

# settings.py

INSTALLED_APPS = [
    ...
    # 注释掉它
    # 'django.contrib.staticfiles',
    ...
]

DEBUG = True

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 注释掉它
# STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

所以此时你需要手动添加静态文件的路由解析:

# urls.py

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    ...
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

这样子就可以了,也是同样的效果。

这种方式的问题是后台 Admin 的静态文件都无法加载了,必须另外想办法手动管理起来,比如用部署时经常用到的 collectstatic 把相关文件收集起来,再配置路径。沿用了内置 admin 的同学还是尽量用第一种方案更方便。

部署阶段

部署阶段的套路就完全不同了,最主要的区别是这个东西:

# settings.py

DEBUG = False

此时 Django 就不再管理静态文件了,哪怕你配置了路由也不行。这是因为静态文件由 Django 来管理的效率实在是太低了,应该交由更高效的网络服务管理起来,如 Nginx 等。

即所有静态文件的请求都由 Nginx 直接处理,完全不经过 Django 了,所以此时不管你怎么折腾 Django 的配置都是没用的了。

部署阶段的静态文件管理在我之前的文章 《将博客部署到线上》 有过详细探讨了,有兴趣的朋友可以参照。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值