【问题标题】:Issue with STATIC FILES on DjangoDjango上的静态文件问题
【发布时间】:2020-11-06 20:46:12
【问题描述】:

我从 github 克隆了一个项目,他们对静态文件使用了一些“特殊配置”,而不是使用 '/static/'、'/static_in_env/',我不太明白他们为什么这样做,所以我决定将其更改为大多数文档或教程中出现的内容,即以下配置。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'assets')]
STATIC_ROOT = os.path.join (BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

只是为了提供一些额外的信息:

在 TEMPLATES 里面,除了其他的,我还有:

 'DIRS': [os.path.join(BASE_DIR, 'templates')],

该网站似乎没问题(ish),因为我遇到的问题是它呈现模板但没有 css

我也有里面 INSTALLED_APPS 'django.contrib.staticfiles'

在左侧,(在 vscode 上)我有一个名为 static 的文件夹,它看起来比其他文件夹暗一些(我不知道这是什么意思)

我正在使用 python 3 创建的 venv, 当我跑步时

python --version 

它告诉我我正在使用 python 3.6.9,这对我来说似乎没问题。

我也已经跑了

python manage.py collectstatic 

以前也手动将所有静态文件复制到资产中,因此 collectstatic 命令将它们放在任何应该让程序读取它们的位置,它告诉我所有文件已被移动(或收集,我不确定它在 collectstatic 之后是什么意思)。

这是它找不到的众多静态文件之一(从字面上看,它似乎无法进入该文件夹)

[2020-07-17 04:33:31,265] 日志:警告 - 未找到:/static/css/style.default.css [17/Jul/2020 04:33:31]“GET /static/css/style.default.css HTTP/1.1”404 77

我也尝试了 chmod 774 那个文件夹,并且还去了http://127.0.0.1:8000/static 它返回

未找到
在此服务器上找不到请求的资源。

最后一件事,我记得曾经尝试过一个我现在找不到的命令,因为我从一些我找不到的论坛复制了,但据说那是为了让你知道 django 实际所在的地址寻找文件, 我只是确定该命令包含详细一词。当我执行它时,似乎 django 正在从 django 安装或 venv 中读取静态文件(尽管我不完全确定,因为我无法再次找到该命令,我如果有人能告诉我,我将不胜感激。)。

我的想法已经用完了,我可以重新启动项目或重试,但这让我很生气,因为我在想,有什么问题我已经仔细检查了每一个部分,但仍然没有工作。

  • 静态文件夹与模板文件夹和资产以及应用程序处于同一级别(与 manage.py 相同)。

【问题讨论】:

    标签: python django static


    【解决方案1】:

    我的 django 项目运行良好,可以在命令行和 Pycharm 上提供静态文件。在 VSCode 上,未提供静态文件。 我的代码如下所示:

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

    我的静态文件存储在 django 项目文件夹下方名为“static”的文件夹中。

    在我将 STATICFILES_DIRS 更改为绝对路径后,它工作正常,如下面的代码:

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

    现在它的工作没有问题或对代码或配置进行任何其他必要的更改。

    【讨论】:

      【解决方案2】:

      听起来您正在尝试通过 URL 访问静态文件。

      您所指的“智能静态文件”可能使用了第三方资源,例如为静态文件提供服务的 AWS。如果你想去 localhost:8000/static/file.ext

      尝试将其添加到 urls.py 的底部:

      from django.conf import settings
      from django.conf.urls.static import static
      
      urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
      

      【讨论】:

      • 谢谢,这就是问题所在,我在开发中将 debug 设置为 false(进行实验),并且在 urls.py 中有那段代码,在 if debug: 所以它不起作用.
      猜你喜欢
      • 2016-11-13
      • 2011-06-11
      • 2020-06-24
      • 1970-01-01
      • 2018-10-21
      • 2013-11-22
      • 2018-09-10
      • 2020-11-16
      • 1970-01-01
      相关资源
      最近更新 更多