Django找不到静态文件,求助,快疯了
Django没有提供我的静态文件。这里是返回的错误信息:
[13/Jun/2014 06:12:09] "GET /refund/ HTTP/1.1" 200 2927
[13/Jun/2014 06:12:09] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 1667
[13/Jun/2014 06:12:09] "GET /static/css/cover.css HTTP/1.1" 404 1643
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667
这是我用于bootstrap的base.html文件的相关部分:
!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">
<title>Cover Template for Bootstrap</title>
<!-- Bootstrap core CSS -->
{
<link href="{% static "css/bootstrap.min.css"%}" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="{% static "css/cover.css" %}" rel="stylesheet">
这是settings.py中的相关代码(注意:模板部分运行得很好)。
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
STATIC_URL = '/static/'
STATIC_ROOT = ''
这是我Django项目的结构:
- admin
- db.sqlite3
- 项目名称
- manage.py
- 应用名称
- static
- css
- ...
- dist
- ...
- css
- template
- base.html
任何帮助都将非常感激。我不知道我可能做错了什么,我看了代码无数遍,明显是我对Django如何提供静态文件的理解有些欠缺;不过我之前做这个的时候没有遇到过问题。
6 个回答
根据你的版本来调整 TEMPLATE_DIRS
如果你的版本是 3.1 或更低
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'templates'),)
如果版本高于 3.2
STATICFILES_DIRS = [
BASE_DIR / "static",]
可以查看 这个链接 来获取更多信息
我在Django中遇到了静态文件的问题,花了一整天才搞明白为什么我的项目在运行时不加载静态文件,也不显示。
最后我找到了问题所在……
我发现这个问题是因为文件系统的权限问题。你需要给项目中的静态文件设置权限,这样问题就解决了。
在Linux系统中,你可以运行这个命令:
sudo chmod 777 <your static folder relative address> -R
我在看教程的时候,遇到了这个问题,真是卡住了。不过,简单地重启一下网络服务就解决了这个问题。
所以,如果你在完成教程的步骤时,可以在名为static/<你的应用名称>/style.css的目录里放一个文件,同时在
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static '<your_app_name>/style.css' %}" />
这个代码放在一个HTML文件的头部,比如index.html,这样这个HTML文件就可以使用你刚才提到的CSS样式了。
修改settings.py中的STATIC_ROOT,我希望这样能解决问题。我也遇到了同样的问题....
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
请按照以下步骤操作:
如果你在调试模式(DEBUG)下,先在你的 settings.py 文件中设置 STATICFILES_DIRS = ("path/to/static") 这个变量。这样的话,它就只会在调试模式下工作。
如果你希望它在发布模式下也能工作,就要在 settings.py 中设置 STATIC_ROOT = ("path/to/static_root") 这个变量。然后,执行
python manage.py collectstatic
,这样它也应该能正常工作。
接下来,为了更好地理解 Django 是如何管理静态文件的:
Django 有一些预设的地方来查找和收集静态文件,你可以在 settings.py 中通过 STATICFILES_FINDERS 来指定查找的地方。默认情况下,它会在你的应用程序内部查找静态文件夹。你可以通过设置 STATICFILES_DIRS 变量(路径的列表或元组)来告诉 Django 在其他地方查找静态文件。
在调试模式下,静态文件是从这些路径中获取的,而不是从你收集文件的 static_root 中获取。
当你执行
python manage.py collectstatic
时,Django 会遍历所有可以找到静态文件的目录,并把它们放到你的静态根目录中。在发布模式下,静态文件是从这个目录中提供的。
附注:我通常会创建一个叫做 common 的应用,并在里面创建一个静态目录,用来放置我项目中所有公共的 CSS 和 JS 文件(还有模板用的)。这样,我就不需要指定 STATICFILES_DIRS 变量了。
希望现在能更清楚了 =).