【问题标题】:Django collected static files are not accessible by templates模板无法访问 Django 收集的静态文件
【发布时间】:2021-03-11 08:04:51
【问题描述】:

我创建了一个包含一些应用程序的 django 项目。最初,我只有一个应用程序,其中有静态文件和模板。随着项目的增长,我向项目中添加了一些其他应用程序,它们仍在从主应用程序内部访问静态文件和模板。在我尝试制作一个简单的产品并使用collectstatic 命令之前,我并没有太在意这个问题。似乎我可以将我的静态文件收集到STATIC_ROOT 目录,但我无法在模板中访问它们。这是我的项目结构:

shop/
-myshop(main app)
--statics
--templates
-(some other apps beside main app)
-shop(directory created by project containing settings.py, manage.py)

这是我的相关@​​987654324@ 配置:

BASE_DIR = Path(__file__).resolve().parent.parent
INSTALLED_APPS = [
    ...
    'django.contrib.staticfiles',
    ...
]
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / 'myshop/static',
]
STATIC_ROOT = BASE_DIR / 'static'

在运行collectstatic 后,django 在项目的根目录中创建了static 目录,但是当我删除或重命名myshop/static 时,我在runserver 中得到静态文件404。 我不知道如何在运行时检查{% load static %} 生成的路径以在此处放置更多信息。是否有任何调试例程可以了解 django 后端在做什么?

【问题讨论】:

    标签: django django-templates django-staticfiles


    【解决方案1】:

    试试这个

    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = [
       BASE_DIR / "static",
    ]
    
    STATIC_ROOT = BASE_DIR.parent / "static_cdn"
    

    $ python manage.py collectstatic此命令会将所有文件从您的静态文件夹复制到 STATIC_ROOT 目录中。

    你必须写静态文件夹和静态根文件夹的名称不同。

    了解更多https://docs.djangoproject.com/en/3.1/howto/static-files/#configuring-static-files

    【讨论】:

    • 如果您希望静态根目录位于您的项目中,您可以在 BASE_DIRS 中删除 .parent。
    • 这是要做什么?我的意思是我应该在这些更改之后运行收集静态数据吗?除此之外 mySTATICFILES_DIRS' 不在 BASE_DIR / "static"
    • 就我而言,它们实际上是不同的!一种是BASE / static,用于收集静态文件。另一个是BASE / myshop / static,使用collectstatic从中收集静态文件。
    • 我知道两者不同,但收藏家找到了静态文件夹并将其存储在静态根目录中。但是你将静态路由和静态路由都命名为相同的,因为你可能也犯了错误,只需更改并尝试
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2013-10-01
    • 2018-08-31
    • 2017-03-03
    • 2014-01-25
    • 2020-10-02
    • 2021-04-19
    • 2021-01-25
    相关资源
    最近更新 更多