Django无法识别静态文件

3
所以问题在于Django无法识别静态文件。无论我尝试了什么,它都不起作用。我尝试将全局搜索方式更改为CSS文件的直接URL,但这些都没有起作用。
我的项目结构如下:

structure

这是我的代码:
DEBUG = True
INSTALLED_APPS = [
   'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
]
    STATIC_URL = '/static/'
    STATIC_DIRS = [os.path.join(BASE_DIR, "static")]
    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")
    from django.contrib import admin
    from django.urls import path
    from something.views import *
    from django.conf import settings
    from django.conf.urls.static import static
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', home),
        ]
    if settings.DEBUG:
        urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
    {% load static from staticfiles %}
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <title>Monkeys</title>
            <link rel="stylesheet" type="text/css" href="{% static 'css/file.css' %}"/>
        </head>

我在互联网上找不到答案,希望你能帮忙。


4
欢迎来到StackOverflow!你运行了python manage.py collectstatic吗?此外,问题是在调试模式还是生产模式下发生的(或两种模式都有问题)? - Johan
从我看到的情况来看,您已经收集了静态文件。 - Iakovos Belonias
"GET /static/css/file.css HTTP/1.1" 404 1761 - 这就是错误,但我应该把打印命令放在哪里才能避免出现未定义变量的另一个错误? - Ivan Iziumov
你的文件在这里吗 /Users/ivanizumov/Desktop/environment/static_cdn/css/file.css - Ivan Starostin
1
展示此文件的完整路径,无论它在哪里。并请回答第一条评论中的问题:在您的情况下,DEBUG是False还是True?您正在运行开发环境还是生产环境? - Ivan Starostin
显示剩余6条评论
2个回答

3

返回到之前的步骤设置静态文件,并确保严格按照django文档操作

关于静态文件的内容

这个项目的结构和你的类似

当运行collectstatic时,使用默认的STATICFILES_FINDERS值django.contrib.staticfiles.finders.FileSystemFinder将从STATICFILES_DIRS中任何路径收集您的静态文件。

另一个默认的STATICFILES_FINDERS值django.contrib.staticfiles.finders.AppDirectoriesFinder将在INSTALLED_APPS中任何应用程序的/static/文件夹中查找。

找到的所有静态文件都将放置在指定的STATIC_ROOT目录中。

STATIC_URL = '/static/'

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

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")

你也可以使用命令python manage.py findstatic来查看collectstatic将会查找哪些目录。
manage.py findstatic

2

目前您有一个错别字 - STATIC_DIRS 而不是 STATICFILES_DIRS,所以当前未配置collectstatic。

修复它,然后再次运行collectstatic


实际上,它指向了正确的位置,因为当我尝试了你提供的第二个选项时,它给了我一个错误,如下所示--> FileNotFoundError: [Errno 2] No such file or directory: '/Users/ivanizumov/Desktop/environment/practice/practice/static'。 - Ivan Iziumov
好的,我没有注意到 os.path.dirname。已编辑。 - Ivan Starostin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接