直接说答案
在settings.py文件中写好 STATIC_URL 和(STATICFILES_DIRS 或 STATIC_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_DIRS 和 STATIC_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
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
暂且就这样,有补充以后再补充。