Django设置DEBUG=False之后无法加载CSS等静态文件

直接说答案

在settings.py文件中写好 STATIC_URL 和(STATICFILES_DIRSSTATIC_ROOT 二选一) ,例:

STATIC_URL = "static/"
# STATICFILES_DIRS 和 STATIC_ROOT 写一个就行
# STATIC_ROOT = "D:/coder/Python/mysite/templates/static/"  # 写你的静态文件夹的绝对路径
STATICFILES_DIRS = (
	# 这里的字符串写你的静态文件夹相对于你的项目目录的路径
	# 不要管代码提示的路径!!!!
	# 我把static放在了templates目录下面,所以这么写
    os.path.join(BASE_DIR, "templates/static"),  
)
"""
BASE_DIR=就是你项目的绝对路径。
例如:我的项目路径为D:/coder/Python/mysite,
则此处相当于是STATICFILES_DIRS = ("D:/coder/Python/mysite/templates/static/")
你可以这么理解,但不要这么写,写了会报错
"""

这里的 STATIC_URL 必须写,不写就 Server Error (500)

你在写 STATICFILES_DIRS 的时候,如果按代码提示去写字符串里的路径,会报错,以为代码提示的是相对于seting.py文件的路径,而不是相对于项目文件夹的路径:

WARNINGS:
?: (staticfiles.W004) The directory 'D:\coder\Python\mysite\../templates/static' in the STATICFILES_DIRS setting does not exist.

翻译:
在 STATICFILES_DIRS 设置中的路径"D:\......"不存在

这里如果写的是 STATIC_ROOT 而不是 STATICFILES_DIRS,Django会报304错误,但页面也能正常显示。

[19/Jan/2022 17:09:40] "GET /static/css/style.css HTTP/1.1" 304 0

附:304错误:304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码。
转自:https://blog.csdn.net/banana960531/article/details/85621865

我看别的帖子很多把 STATICFILES_DIRSSTATIC_ROOT 都写着的,我写着就报错,两个只能留一个

ERRORS:
?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

翻译:
错误:
?:(静态文件。E002) STATICFILES_DIRS设置不应包含STATIC_ROOT设置。

写好settings.py之后,开始写项目的总url.py文件
urlpatterns 里面加上 re_path(‘static/(?P .*)$’, static.serve, {“document_root”: settings.STATIC_ROOT}), 变成

from django.urls import path, include, re_path
from django.views import static
from django.conf import settings

urlpatterns = [
	"""下面两条是原来就有的"""
    path('admin/', admin.site.urls),
    path("", include('main_site.urls')),
    
    """下面三条是新加的,三选一"""
    re_path('static/(?P<path>.*)$', static.serve, {"document_root": settings.STATIC_ROOT}),
    # re_path('static/(?P<path>.*)$', static.serve, {"document_root": settings.STATICFILES_DIRS[0]}),  # 注意,这里取STATICFILES_DIRS里的[0]才行,直接写STATICFILES_DIRS会报服务器500错误
    # re_path('static/(?P<path>.*)$', static.serve, {"document_root": "D:/coder/Python/mysite/templates/static/"}),  # 直接在这里手动写静态文件夹绝对路径
]

很多帖子说是 from django.conf.urls import url,而不是 from django.urls import re_path ,怀疑是Django版本的问题,我的是4.0

之后别忘记修改你的settings.py文件里的 ALLOWED_HOSTS

暂且就这样,有补充以后再补充。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值