【问题标题】:Django 1.11 - static file not foundDjango 1.11 - 找不到静态文件
【发布时间】:2018-04-09 18:36:10
【问题描述】:

我正在开发一个 Django 项目 (Django 1.11),我正在尝试使用静态文件。
这是我的项目结构:

|project_name
|---- app_name
|-------- src
|------------ static
|---------------- css
|-------------------- bootstrap
|------------------------ bootstrap.min.css
|-------- templates
|------------ base.html
|------------ first_template.html
|-------- views
|------------ first_view.py
|---- project_name
|-------- settings.py

在 settings.py 文件中,我在 INSTALLED_APPS 中有 django.contrib.staticfiles,我将 STATIC_URL 变量设置如下:

STATIC_URL = '/src/static/'

然后,我想在基本模板中使用静态文件,这就是我所做的:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    <link href="{% static "css/bootstrap/bootstrap.min.css" %}" rel="stylesheet">
</head>
<body>
    {% block content %}{% endblock content %}
</body>
</html>

当我加载 first_template.html 以及 base.html 文件时,找不到 bootstrap.min.css 文件 (404)。

我知道这是一个微不足道的问题,但我真的不明白我错过了什么。我检查了很多类似的 SO 问题都没有成功,也因为它们中的大多数都引用了旧的 django 版本
提前谢谢你

【问题讨论】:

    标签: python django django-staticfiles


    【解决方案1】:

    既然您使用的是自定义路径,为什么不告诉 django 在哪里找到它.. 在设置中使用它,它应该可以正常工作。

    选项1:

    如果您认真考虑保留文件结构

    #settings.py
    STATICFILES_DIRS = (
        ...
        os.path.join(BASE_DIR, 'app/src/static') # build appropriate path
    )
    

    更新:

    选项2:

    将静态文件夹移动到 manage.py 所在的位置或应用的子级中。

    示例:

    ...manage.py
    ...static
    ...app/
    

    ...manage.py
    ...app/static
    

    【讨论】:

    • 感谢您的回答,您的第一个选项效果很好,但 STATIC_URL="/static/" 也应该修改。
    【解决方案2】:

    STATIC_URL 只控制静态文件 URL 的前缀(即网址)。它不控制它们在磁盘上的物理位置。

    将您的静态文件从app_name/src/static/ 移动到app_name/static/,这应该可以解决问题

    编辑: 如果你想保持目录结构不变,你有几个选择

    1. 手动将静态文件目录添加到STATICFILES_DIRS
    2. 创建一个继承自django.contrib.staticfiles.finders.AppDirectoriesFinder的类并设置source_dir属性

    from django.contrib.staticfiles.finders import AppDirectoriesFinder class MyAppDirFinder(AppDirectoriesFinder): source_dir = "src/static"

    然后你可以将你的班级添加到STATICFILES_FINDERS

    STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'myapp.finders.MyAppDirFinder',
    
    ]
    

    参考:https://docs.djangoproject.com/en/1.11/ref/settings/#static-files

    【讨论】:

    • 感谢您的回答,但我更喜欢保持项目结构不变
    【解决方案3】:

    Indside 静态文件夹,您需要创建一个带有应用名称的文件夹

    现在你的文件夹结构是

       |-------- src
        |------------ static
        |---------------- css
        |-------------------- bootstrap
        |------------------------ bootstrap.min.css
    

    改成

    |-------- src
    |------------ static
    |-------------------app_name
    |--------------------------- css
    |-------------------- ----------bootstrap
    |---------------------------------------- bootstrap.min.css
    

    【讨论】:

      【解决方案4】:

      添加

      STATICFILES_DIRS=(os.path.join(BASE_DIR, '../frontend'),)
      

      STATICFILES_DIRS=()
      

      在您的设置中。 然后它应该工作。 我花了很长时间才找到这个。

      【讨论】:

        猜你喜欢
        • 2018-11-15
        • 2019-04-26
        • 1970-01-01
        • 2021-08-27
        • 2014-11-10
        • 2011-08-26
        • 2020-06-22
        • 2021-08-16
        相关资源
        最近更新 更多