附加斜线不起作用

时间:2012-02-27 10:06:06

标签: django django-views

我有这个urlConf,并且在使用尾部斜杠访问时工作正常。:

urlpatterns = patterns('', url(r'^allvideo/$','my.views.allvideo'))

即使

APPEND_SLASH=True

它给了我属性错误“'str'对象没有属性'resolve'”,当发出请求时缺少尾部斜杠

任何想法?

5 个答案:

答案 0 :(得分:15)

APPEND_SLASH不会无条件地发生 - 只有在尝试所有现有的URL模式(以及相关视图,如果匹配的话)之后,它才会生效,Django即将返回404。

如果是这种情况,并且原始请求最后没有斜杠,那么Django会检查是否有任何URL模式与尾部斜杠匹配。如果是这样,它会发出HTTP重定向。

如果您的任何URL模式与原始请求匹配(没有斜杠),那么Django将首先尝试该模式。如果这会引发异常,那么你会看到它(我怀疑这就是发生的事情)。 Django永远不会发出重定向。

答案 1 :(得分:3)

这肯定会解决您的问题。您可以使用或不使用尾部斜杠来提供网址,它会为您提供相同的结果。

在网址文件中,

urlpatterns = patterns('', url(r'^allvideo/?$','my.views.allvideo'))

在尾部斜杠后添加问号。 当你输入一个url时,它将首先检查尾部斜杠,否则它将匹配它而没有尾部斜杠,在任何一种情况下都会给你相同的响应。希望这对你有所帮助。快乐的编码。

答案 2 :(得分:3)

如果您添加了一些自己的中间件,则中间件的顺序非常重要。我有一个类似的情况,斜线在之前工作,并添加一个中间件项目打破它。切换订单后,一切都重新开始了。

答案 3 :(得分:0)

不确定根本原因是什么,但这些可能会帮助您绕过它或缩小范围:

(1)您是否尝试使用实际的视图函数作为参数(而不是字符串):

from my.views import allvideo
urlpatterns = patterns('', url(r'^allvideo/$',allvideo))

(2)或者跳过使用url-function:

urlpatterns = patterns('', (r'^allvideo/$','my.views.allvideo'))

答案 4 :(得分:0)

即使看起来令人难以置信,我也遇到了同样的问题,只是重新启动开发服务器就修复了它。只记得:

python manage.py runserver