【问题标题】:Static Files With Django Development Server 1.7 Slightly Different Directory Settings静态文件与 Django Development Server 1.7 目录设置略有不同
【发布时间】:2014-10-13 21:56:07
【问题描述】:

这是我的网站目录:

django_project
    \bin
    \include
    \lib
    \src
        \django_project
            settings.py
        \app2
        manage.py
    \static
        \js
        \css
        \media
    \templates
        base.html

我在 settings.py 中添加的是:

STATIC_URL = '/static/'

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(BASE_DIR), "templates"),
)

if DEBUG:
    MEDIA_URL = '/media/'
    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static"),
    MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media"),
    STATICFILES_DIRS = (
        os.path.join(os.path.dirname(BASE_DIR), "static"),
    ),

到我的 urls.py:

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

嘿,它不起作用。我在 base.html 中引用它们的方式是:

<link href="/static/css/bootstrap.min.css" rel="stylesheet">

有什么想法吗?

谢谢。 哈桑

【问题讨论】:

  • 您的代码中有一些尾随逗号,位于if DEBUG: 块中。另外我认为不需要额外的 urlpatterns(我不使用这些)
  • 想通了,它实际上在尾随逗号和目录命名方面存在问题。现在是凌晨 2 点,今天是我的生日,所以我现在要睡觉了,明天回答过去 :)

标签: python django file static django-staticfiles


【解决方案1】:

运行您粘贴的设置给我一个错误ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting。在设置中注释掉os.path.join(os.path.dirname(BASE_DIR), "static"), 删除了错误并且模板正确地找到了没有URLs.py 修改的CSS 文件。

【讨论】:

  • 我在此配置中没有收到 ImproperlyConfigured 错误。即使我有 urls.py 修改它也找不到。它在查看 html 时确实找到了它们,但在开发服务器上却没有。不过谢谢。构建目录的正确方法应该是什么?
  • 我刚刚发现,它实际上存在尾随逗号的问题,并且由于目录命名而引发了 ImproperlyConfigured 错误。所有其他的东西都是必要的。现在已经是凌晨 2 点了,今天是我的生日,所以我现在要睡觉了,明天回答过去 :)
【解决方案2】:

首先正如@r---------k 提到的,除了元组之外,我不应该有尾随逗号。所以 settings.py 应该是这样的:

if DEBUG:
    MEDIA_URL = '/media/'
    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static")
    MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media")
    STATICFILES_DIRS = (
        os.path.join(os.path.dirname(BASE_DIR), "static", "static")
    ),

第二件事是,您可能会注意到,STATIC_ROOT 和 STATICFILES_DIRS 不可能具有相同的值。我在静态文件夹中添加了另一个静态文件夹,并将我的 js 和 css 文件夹放入其中:

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(BASE_DIR), "static", "static")
),

目录如下:

django_project
    \bin
    \include
    \lib
    \src
        \django_project
            settings.py
        \app2
        manage.py
    \static
        \static
            \js
            \css
        \media
    \templates
        base.html

最后,你的 urls.py 中应该有 urlpatterns:

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【讨论】:

    【解决方案3】:

    这似乎在您的urls.py 中的当前 django (2.2) 中有效:

    from django.conf import settings
    from django.conf.urls.static import serve
    from django.urls import include, path
    
    urlpatterns += [
        path(settings.STATIC_URL[1:], serve, {'document_root': settings.STATIC_ROOT })
    ]
    

    记得运行./manage.py collectstatic收集静态文件到settings.STATIC_ROOT

    【讨论】:

      猜你喜欢
      • 2015-10-06
      • 2014-05-05
      • 2014-11-25
      • 2014-12-22
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      相关资源
      最近更新 更多