我有这个urlConf,并且在使用尾部斜杠访问时工作正常。:
urlpatterns = patterns('', url(r'^allvideo/$','my.views.allvideo'))
即使
APPEND_SLASH=True
它给了我属性错误“'str'对象没有属性'resolve'”,当发出请求时缺少尾部斜杠
任何想法?
答案 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