无法在Django开发服务器中提供来自/ static URL root的内容

phi*_*ipk 4 django

我非常困惑了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}),
    )
Run Code Online (Sandbox Code Playgroud)

如果我访问/ 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}),
    )
Run Code Online (Sandbox Code Playgroud)

与/ otherstatic /相关的一切都非常有效.

我还应该添加/ media /或/ admin_media /没有问题.

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

谢谢!

Thi*_*Lam 5

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

仔细阅读第一点,第二行.

这是一个例子:

project/
    yourapp/
        static/
            iphone.png
    settings.py
Run Code Online (Sandbox Code Playgroud)

假设yourapp在你的INSTALLED_APPS,你应该能够使用iphone.png以下网址访问图像:

http://localhost:8000/static/iphone.png
Run Code Online (Sandbox Code Playgroud)

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

import os
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, 'static'),
)
Run Code Online (Sandbox Code Playgroud)

请注意上述情况,确保没有任何路径STATICFILES_DIRS与您设置的路径匹配STATIC_ROOT.后者主要用于生产.

设置static完成urls.py后,请随意从项目中删除该行STATICFILES_DIRS.