django - 夹层 - 静态文件 - 令人沮丧的错误
django - mezzanine - staticfiles - frustrating error
我是 Django 的新手。我有一些困难,我的静态文件没有正确加载。
我的项目目录如下所示:
- 我的新网站
- 我的新网站
- 家
- 静态
- css
- home.css
- 模板
- 家
- 指数
- manage.py
- init.py
我在 myNewWebSite/settings.py 中配置了以下设置:
PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
PROJECT_ROOT = BASE_DIR = os.path.dirname(PROJECT_APP_PATH)
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, STATIC_URL.strip("/"))
我的模板(templates/home/index.html):
{% load staticfiles %}
<html>
<head>
<link rel="stylesheet" type="text/css" href="{% static 'css/home.css' %}" />
</head>
<body>
<h1 id="test">Hello World, This is my first website in django</h1>
</body>
</html>
我在 static/css/home 中的风格。css:
body {
background-color: red;
}
#test {
border: 10px solid green;
}
我看不到这些更改的任何效果。仅显示消息 Hello World,...
。输出显示如下:
[08/Jun/2016 20:36:04] "GET /myhome/ HTTP/1.1" 200 178
[08/Jun/2016 20:36:04] "GET /static/css/home.css HTTP/1.1" 301 0
[08/Jun/2016 20:36:04] "GET /static/css/home.css/ HTTP/1.1" 404 4930
我在settings.py和local_settings.py中设置了DEBUG = False
(夹层) .
有什么问题?
更新
运行 带有 --insecure
参数的开发服务器解决了这个问题。
感谢GDorn
如果DEBUG = False
那么python manage.py runserver --insecure
如果 DEBUG=False,Django 不提供静态文件。 --insecure
选项似乎是一种解决方法,或者更准确地说,如果处于调试模式,开发服务器 运行 会自动不安全。
在生产环境中正确的方法是 运行 python manage.py collectstatic
并将远程代理服务器(nginx、apache 等)指向生成的文件夹(可以配置在设置中)。或者,您可以将静态数据放在 AWS S3 存储桶中。
您无论如何都不应该 运行 您的 python manage.py runserver
项目投入生产。如果您还没有部署,只需使用 DEBUG=True
.
测试您的项目
另一个选项是向您的 url 配置添加静态视图。
# urls.py
from os import path
from django.conf import settings
from django.conf.urls import url
from django.views.static import serve
urlpatterns = [
# your patterns here
]
urlpatterns += [url(
r'^static/(?P<path>.*)$', serve,
{'document_root': path.join(settings.BASE_DIR, 'static/public')})]
显然路径必须与您的项目匹配。但即使是这种方法也不推荐在生产中使用。它只是规避了 Django 在 DEBUG = False 时不提供静态服务的事实。它仍然需要您 运行 python manage.py collectstatic
每当您对静态文件进行更改时。
我是 Django 的新手。我有一些困难,我的静态文件没有正确加载。
我的项目目录如下所示:
- 我的新网站
- 我的新网站
- 家
- 静态
- css
- home.css
- css
- 模板
- 家
- 指数
- 家
- manage.py
- init.py
我在 myNewWebSite/settings.py 中配置了以下设置:
PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
PROJECT_ROOT = BASE_DIR = os.path.dirname(PROJECT_APP_PATH)
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, STATIC_URL.strip("/"))
我的模板(templates/home/index.html):
{% load staticfiles %}
<html>
<head>
<link rel="stylesheet" type="text/css" href="{% static 'css/home.css' %}" />
</head>
<body>
<h1 id="test">Hello World, This is my first website in django</h1>
</body>
</html>
我在 static/css/home 中的风格。css:
body {
background-color: red;
}
#test {
border: 10px solid green;
}
我看不到这些更改的任何效果。仅显示消息 Hello World,...
。输出显示如下:
[08/Jun/2016 20:36:04] "GET /myhome/ HTTP/1.1" 200 178
[08/Jun/2016 20:36:04] "GET /static/css/home.css HTTP/1.1" 301 0
[08/Jun/2016 20:36:04] "GET /static/css/home.css/ HTTP/1.1" 404 4930
我在settings.py和local_settings.py中设置了DEBUG = False
(夹层) .
有什么问题?
更新
运行 带有 --insecure
参数的开发服务器解决了这个问题。
感谢GDorn
如果DEBUG = False
那么python manage.py runserver --insecure
如果 DEBUG=False,Django 不提供静态文件。 --insecure
选项似乎是一种解决方法,或者更准确地说,如果处于调试模式,开发服务器 运行 会自动不安全。
在生产环境中正确的方法是 运行 python manage.py collectstatic
并将远程代理服务器(nginx、apache 等)指向生成的文件夹(可以配置在设置中)。或者,您可以将静态数据放在 AWS S3 存储桶中。
您无论如何都不应该 运行 您的 python manage.py runserver
项目投入生产。如果您还没有部署,只需使用 DEBUG=True
.
另一个选项是向您的 url 配置添加静态视图。
# urls.py
from os import path
from django.conf import settings
from django.conf.urls import url
from django.views.static import serve
urlpatterns = [
# your patterns here
]
urlpatterns += [url(
r'^static/(?P<path>.*)$', serve,
{'document_root': path.join(settings.BASE_DIR, 'static/public')})]
显然路径必须与您的项目匹配。但即使是这种方法也不推荐在生产中使用。它只是规避了 Django 在 DEBUG = False 时不提供静态服务的事实。它仍然需要您 运行 python manage.py collectstatic
每当您对静态文件进行更改时。