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

时间:2011-04-02 16:11:19

标签: 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}),
    )

如果我访问/ 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的新静态文件应用程序有关吗? (如果是这样,谁认为完全打破这个非常简单的用例是个好主意?)

谢谢!

2 个答案:

答案 0 :(得分:5)

在Django 1.3中,django.contrib.staticfilesINSTALLED_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中设置的路径不匹配。后者主要用于生产。

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

答案 1 :(得分:1)

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

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

  

此视图自动启用   runserver(将DEBUG设置设置为   真正)。使用带有的视图   不同的本地开发服务器   将以下代码段添加到最后   您的主要网址配置: