2012-02-27 76 views
9

我有这样的URL配置和做工精细而以斜线:追加斜杠不工作

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

即使

它给我的属性错误“访问‘STR’对象有没有属性“解决”“,当请求是与缺少的尾部斜杠

任何想法??

+0

你有没有['django.middleware.common.CommonMiddleware'](https://docs.djangoproject.com/en/dev/ref/settings/#append-slash),安装在你的'MIDDLEWARE_CLASSES'中? – 2012-02-27 10:27:12

+0

是的,commonMiddleware是 – user1170364 2012-02-27 10:28:41

+0

你可以发布回溯? – jpic 2012-02-27 11:57:32

回答

0

不知道什么是根本原因,但这些可以帮助你去解决它或它缩小:

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

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

(2)或使用URL功能跳过:

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

thn didn work :( – user1170364 2012-02-28 06:56:03

14

APPEND_SLASH不是无条件地发生 - 它只是生效如果在尝试所有现有的URL后模式(和相关的视图,如果匹配的话),Django即将返回一个404.

如果是这样,并且原始请求在末尾没有斜线,那么Django会检查是否有任何网址格式会与尾部的斜线匹配。如果是这样,它会发出HTTP重定向。

如果你的任何URL模式匹配原始请求(没有斜杠),那么Django会先尝试一个。如果这引发了一个例外,那么你会看到它(我怀疑这是发生了什么)。 Django永远不会发出重定向。

+1

它的工作正常与尾部斜杠,因为我在我的问题中提到... prb只发生尾部斜线丢失时 – user1170364 2012-02-28 06:55:23

+1

也许随着尾部斜杠删除,它匹配* *不同* url模式你在期待 – 2012-02-28 14:38:10

3

这一定会解决您的问题。你可以提供带有或不带尾随斜线的URL,它会给你相同的结果。

在网址的文件,

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

最后的斜线后面添加问号。 当你输入一个url时,它将首先检查结尾的斜线,或者它将匹配它而没有结尾的斜线,并且在任何情况下都会给你相同的响应。希望这对你有一些帮助。快乐编码。

+1

我认为这是最好的解决方案 – 2013-01-19 03:34:43

+8

不是因为你会在同一个页面上有两个网址 – Natim 2013-05-02 08:17:58

+2

就像@Natim所说的,只是增加一些上下文:SEO对于两个URL而不是一个网址是不利的。此外,你不应该围绕一个本来已经有解决方案的框架编写代码。 – Jamey 2014-08-13 17:27:08

0

即使看起来令人难以置信,我也遇到同样的问题,只需重新启动开发服务器即可解决问题。只需要记住:

python manage.py runserver 
3

如果您添加了一些自己的中间件,那么中间件的顺序很重要。我有一个类似的情况,斜线在之前工作,并添加中间件项目打破了它。切换订单后,所有事情再次开始工作。

+1

对我来说,这是通过确保CommonMiddleware低于LocaleMiddleware来解决的。 – 2015-05-21 14:48:22