Django 检索静态文件的 static() 函数没有给出这样的文件 -error

Posted

技术标签:

【中文标题】Django 检索静态文件的 static() 函数没有给出这样的文件 -error【英文标题】:Django's static() function to retrieve static file gives no such file -error 【发布时间】:2022-01-23 03:06:44 【问题描述】:

我正在用 Django 做一个项目,结构如下:

/project
   /cv
      /static
        /configuration
           configuration.json

所以一个项目中包含一个应用程序和一个静态文件夹中的 config.json 文件。

我的 settings.py(最重要的设置):

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "cv",
]
STATIC_URL = "/static/"
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(BASE_DIR, "cv/static")

在我看来,我使用 static() 函数来检索静态文件

def index(request):
    file_path = static("configuration/configuration.json")
    with open(file_path) as f:
        configuration = json.loads(f.read())
    return render(request, "index.html", configuration)

但它一直给我错误:

没有这样的文件或目录:'/static/configuration/configuration.json'

我可以通过将路径字符串显式解析为索引函数来修复它:

def index(request):
    file_path = "./cv/static/configuration/configuration.json"
    with open(file_path) as f:
        configuration = json.loads(f.read())
    return render(request, "index.html", configuration)

但是我该如何使用 static() 函数呢? static() 函数使用了 static_url 变量,但无论我如何调整它,它总是给我类似的错误。

有人知道我在这里做错了什么吗?

【问题讨论】:

【参考方案1】:

static() 函数将返回可以访问文件的 URL,你不需要那个,你需要在文件系统上获取文件的路径。

加入settings.STATIC_ROOT和文件以获取文件系统上文件的路径

def index(request):
    file_path = os.path.join(settings.STATIC_ROOT, "configuration/configuration.json")
    with open(file_path) as f:
        configuration = json.loads(f.read())
    return render(request, "index.html", configuration)

【讨论】:

以上是关于Django 检索静态文件的 static() 函数没有给出这样的文件 -error的主要内容,如果未能解决你的问题,请参考以下文章

Django static静态配置文件

Django静态文件static的配置

django 改了静态文件但是页面没有变

Django--static静态文件引用

配置 STATIC_ROOT 时 Django 不提供静态文件

Django 静态文件 static