Django 1.11 - 找不到静态文件
Django 1.11 - static file not found
我正在开发一个 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版本
提前谢谢你
STATIC_URL
只控制静态文件的前缀URL(即网址)。它不控制它们在磁盘上的物理位置。
将您的静态文件从 app_name/src/static/
移动到 app_name/static/
,这应该可以解决问题
编辑:
如果你想保持目录结构不变,你有几个选择
- 手动将静态文件目录添加到
STATICFILES_DIRS
- 创建一个继承自
django.contrib.staticfiles.finders.AppDirectoriesFinder
的 class 并设置 source_dir 属性
from django.contrib.staticfiles.finders import AppDirectoriesFinder
class MyAppDirFinder(AppDirectoriesFinder):
source_dir = "src/static"
然后您可以将您的 class 添加到 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
在静态文件夹里面你需要创建一个应用名称的文件夹
现在你的文件夹结构是
|-------- src
|------------ static
|---------------- css
|-------------------- bootstrap
|------------------------ bootstrap.min.css
改为
|-------- src
|------------ static
|-------------------app_name
|--------------------------- css
|-------------------- ----------bootstrap
|---------------------------------------- bootstrap.min.css
既然您使用的是自定义路径,为什么不告诉 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
添加
STATICFILES_DIRS=(os.path.join(BASE_DIR, '../frontend'),)
或
STATICFILES_DIRS=()
在您的设置中。
然后它应该工作。
我花了很长时间才找到这个。
我正在开发一个 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版本
提前谢谢你
STATIC_URL
只控制静态文件的前缀URL(即网址)。它不控制它们在磁盘上的物理位置。
将您的静态文件从 app_name/src/static/
移动到 app_name/static/
,这应该可以解决问题
编辑: 如果你想保持目录结构不变,你有几个选择
- 手动将静态文件目录添加到
STATICFILES_DIRS
- 创建一个继承自
django.contrib.staticfiles.finders.AppDirectoriesFinder
的 class 并设置 source_dir 属性
from django.contrib.staticfiles.finders import AppDirectoriesFinder
class MyAppDirFinder(AppDirectoriesFinder):
source_dir = "src/static"
然后您可以将您的 class 添加到 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
在静态文件夹里面你需要创建一个应用名称的文件夹
现在你的文件夹结构是
|-------- src
|------------ static
|---------------- css
|-------------------- bootstrap
|------------------------ bootstrap.min.css
改为
|-------- src
|------------ static
|-------------------app_name
|--------------------------- css
|-------------------- ----------bootstrap
|---------------------------------------- bootstrap.min.css
既然您使用的是自定义路径,为什么不告诉 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
添加
STATICFILES_DIRS=(os.path.join(BASE_DIR, '../frontend'),)
或
STATICFILES_DIRS=()
在您的设置中。 然后它应该工作。 我花了很长时间才找到这个。