【问题标题】:django - mezzanine - staticfiles - frustrating errordjango - 夹层 - 静态文件 - 令人沮丧的错误
【发布时间】:2016-10-09 07:43:19
【问题描述】:

我是 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.pylocal_settings.py(夹层)中设置了 DEBUG = False

有什么问题?

更新

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

感谢GDorn

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

【问题讨论】:

    标签: python css django django-staticfiles mezzanine


    【解决方案1】:

    如果 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')})]
    

    显然路径必须与您的项目相匹配。但即使是这种方法也不推荐在生产中使用。它只是规避了如果 DEBUG = False Django 不提供静态服务的事实。它仍然要求您在更改静态文件时运行python manage.py collectstatic

    【讨论】:

    • 谢谢。什么是 AWS S3?
    • 没关系。它只是一种使用越来越流行的 Amazon Web Services 在云中的存储解决方案。一个典型的例子是静态文件可以在任何地方收集,因为 Django 不对它们做任何事情。它们将由客户端浏览器加载。当然,渲染的模板需要指向正确的位置。因此,您需要在设置中指定此位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多