Django 1.11 - 找不到静态文件

时间:2017-10-28 07:02:46

标签: python django django-staticfiles

我正在研究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版本 提前谢谢

4 个答案:

答案 0 :(得分:2)

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

选项1:

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

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

<强>更新

选项2:

将静态文件夹移动到manage.py存在的位置或移动到app的子项

示例:

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

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

答案 1 :(得分:1)

STATIC_URL仅控制静态文件URL的前缀(即网址)。它无法控制磁盘上的物理位置。

将您的静态文件从app_name/src/static/移动到app_name/static/,然后将其修复

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

  1. 将您的静态文件目录手动添加到STATICFILES_DIRS
  2. 创建一个继承自django.contrib.staticfiles.finders.AppDirectoriesFinder的类并设置source_dir属性
  3. 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

答案 2 :(得分:0)

Indside静态文件夹,您需要创建一个应用程序名称

的文件夹

现在你的文件夹结构是

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

将其更改为

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

答案 3 :(得分:0)

添加

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

STATICFILES_DIRS=()

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