django - mezzanine - staticfiles - 令人沮丧的错误

时间:2016-06-08 20:50:20

标签: python css django django-staticfiles mezzanine

我是Django的新手。我有一些困难,我的静态文件没有正确加载。

我的项目目录如下所示:

  • myNewWebSite
    • myNewWebSite
    • 静态
      • 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 (在Mezzanine中)设置了DEBUG = False

有什么问题?

更新

使用--insecure参数运行开发服务器解决了问题。

感谢GDorn

如果DEBUG = False那么python manage.py runserver --insecure

1 个答案:

答案 0 :(得分:2)

如果DEBUG = False,Django不提供静态文件。 $pageid=$_GET["pageid"] // used for debug echo json_encode(file_get_contents("https://en.wikipedia.org/w/api.php?action=query&prop=extracts&pageids=".$pageid."&format=json")); 选项似乎是一种解决方法,或者更确切地说,如果处于调试模式,dev服务器会自动运行不安全。

在生产环境中,正确的方法是运行--insecure并将远程代理服务器(nginx,apache等)指向生成的文件夹(可以在设置中配置)。或者,您可以将静态信息放在AWS S3存储桶中。

您不应该在生产中运行python manage.py collectstatic项目。如果您尚未部署,只需使用python manage.py runserver测试您的项目。

另一个选项是为您的网址配置添加静态视图。

DEBUG=True

显然,路径必须与您的项目相匹配。但即使是这种方法也不建议在生产中使用。它只是避免了如果DEBUG = False,Django不提供静态的事实。每当您更改静态文件时,仍然需要运行# 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')})]