Django 的 urls 匹配

昨天把Django的admin配好了,同时也写了一个Hello Onlinelist!的app放上去,一切看起来很美。

然后就想把onlinelist.jbobos.org加到Google的WebMaster里,结果发现Google说这个网站没有404,无法通过Verify。原来我写的urls.py,匹配了所有的URL到View的index函数,而这个index永远返回“Hello Onlinelist!”所以永远不会有找不到页面的情况。

修改前的urls.py

urlpatterns = patterns('',
  (r'^admin/(.*)', admin.site.root),
  (r'^(.*)$', include('djsite_onlinelist.onlinelist.urls')),
    #这里拦截了所有的URL,往后传的字符串是空。
)

修改后的urls.py

urlpatterns = patterns('',
  (r'^admin/(.*)', admin.site.root),
  (r'', include('djsite_onlinelist.onlinelist.urls')),
    #把所有的URL一个字不漏的传给onlinelist的urls。
)

onlinelist的urls.py

urlpatterns = patterns('djsite_onlinelist.onlinelist.views',
  (r'^$', 'index'),
    #空URL调用index,返回Hello Onlinelist!,状态码200
  (r'^notfound', 'notfound'),
    #notfound返回HttpResponseNotFound,状态码404
)

另外在templates下创建了404.html和500.html。上述urls中没有匹配到的URL都会显示404.html(状态码404),系统障害的时候会显示500.html(状态码500)。这样把昨天《继续在Dreamhost上配置Django》的遗留问题也解决了。

《参考资料》
Django官方文档:URL dispatcherWriting Views

Leave a Comment