【问题标题】:Unable to serve content from /static URL root in Django development server无法在 Django 开发服务器中从 /static URL 根目录提供内容
【发布时间】:2011-07-28 07:30:41
【问题描述】:

我困惑了整整 30 分钟,但我认为我的问题一定与 Django 1.3 的变化有关。

我的 urls.py 看起来像这样:

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
        (r'^media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
        (r'^admin_media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.ADMIN_MEDIA_ROOT}),
    )

如果我访问 /static/,我会得到一个文件列表。例如,在我的根目录中有一个文件“iphone.png”。转到 /static/iphone.png 我收到 404 消息。

如果我将该部分更改为:

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^otherstatic/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
        (r'^media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
        (r'^admin_media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.ADMIN_MEDIA_ROOT}),
    )

与 /otherstatic/ 相关的所有内容都非常出色。

我还应该补充一点,/media/ 或 /admin_media/ 没有问题。

这与 Django 的新静态文件应用程序有关吗? (如果是这样,谁认为完全打破这个非常简单的用例是个好主意?)

谢谢!

【问题讨论】:

  • 很可能是静态文件。尝试完全禁用它们。
  • 它可能是静态文件,你可以禁用它或更改设置文件中的静态文件根 url,以免与你的 url 冲突

标签: django


【解决方案1】:

除非您使用不同的开发服务器,否则您无需在 urlconf 中添加任何内容以在 STATIC_ROOT 目录中提供静态文件。

http://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#s-static-file-development-view

此视图由以下自动启用 runserver(将 DEBUG 设置设置为 真的)。将视图与 不同的本地开发服务器, 将以下 sn-p 添加到末尾 您的主要 URL 配置:

【讨论】:

    【解决方案2】:

    在 Django 1.3 中,django.contrib.staticfiles 在您的 INSTALLED_APPS 中,框架将在所有具有静态文件夹的应用程序下查找所有静态文件。

    Read the first point, second line carefully.

    这是一个例子:

    project/
        yourapp/
            static/
                iphone.png
        settings.py
    

    假设yourapp 在您的INSTALLED_APPS 中,您应该能够通过以下网址访问iphone.png 图像:

    http://localhost:8000/static/iphone.png
    

    对于您的情况,如果您希望staticfiles 应用程序搜索project/static/ 下的文件,您需要将以下内容添加到您的settings.py

    import os
    SITE_ROOT = os.path.realpath(os.path.dirname(__file__))
    
    STATICFILES_DIRS = (
        os.path.join(SITE_ROOT, 'static'),
    )
    

    请注意上述情况,确保STATICFILES_DIRS 中的所有路径都与您在STATIC_ROOT 中设置的路径不匹配。后者主要用于生产。

    在设置STATICFILES_DIRS 后,请随意从您的项目urls.py 中删除static 行。

    【讨论】:

    • 最终我认为是因为开发服务器已更改。我认为这是由于 contrib/staticfiles/ 中的 urls.py 造成的,尽管我并不肯定。我最终只是从我的 INSTALLED_APPS 中删除了 contrib.staticfiles,这是最简单的修复方法。我只是对 1.3 的默认设置破坏了我在 1.0 之前所做的事情感到有些沮丧。
    • 我也有同样的问题。我按照您的描述配置了我的项目,但是仍然无法使用开发服务器访问静态文件。我不得不通过 static.serve 禁用 staticfiles 应用程序并以旧方式提供静态文件。我在开发阶段使用 Windows,所以可能是平台问题?
    • 你确定你使用的是 Django 1.3 吗?
    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2013-08-29
    • 1970-01-01
    • 2020-05-06
    相关资源
    最近更新 更多