在Django 1.3.1中从错误的url模式获取Page not found(404)



我跟随这个Django博客教程,不能得到教程中给出的url模式正常工作。作者给出的url.py代码为

(r'^static/(?P
.*)$', 'django.views.static.serve',
    {'document_root': 'c:/static/adornment'}),)

,我把它改编成我的Linux设置,像这样

from django.conf.urls.defaults import patterns, include, url
urlpatterns = patterns('',
        (r'^static/(.*)$', 'django.views.static.serve',
            {'document_root': '/home/sez/blog/static/image.png'}
        ),
)  

,转到http://127.0.0.1:8000/static/image.png后,我收到以下错误

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/static/image.png
'image.png' could not be found

我如何使它工作?

将'document_root'更改为目录,并确保将STATIC_URL设置为/static/

您所经历的行为的可能原因如下。你可能有django.contrib。staticfiles'包含在"settings.py"文件中的INSTALLED_APS中。在这种情况下,当你运行"manage.py runserver"(并且你在"settings.py"中设置DEBUG = True),静态文件将由staticfiles应用程序自动从你的STATIC_URL提供,而不是由你的" django.views.static "提供。服务URL模式。然而,在你的情况下,staticfiles应用程序没有正确设置,不会找到你的'image.png'文件。您可能想在这里阅读更多关于常规静态文件服务的信息:管理静态文件。

对于这个问题,STATIC_URL不应该是像现在这样的文件系统路径:STATIC_URL。当你这样做时,你有效地禁用了staticfiles应用程序,结果你的代码开始工作:)

所以,要"正确地"解决你的问题,你需要确保STATIC_URL和你的"urls.py"中的URL路径是不同的,例如,把其中一个改成"/static/",另一个改成"/media/"(或者别的什么),或者直接删除"django.contrib"。如果您不使用它,将从INSTALLED_APPS中删除staticfiles"。(当然,关于将'document_root'作为目录的建议是完全正确的。你可以阅读更多关于使用django.views.static的信息。

相关内容

最新更新