【问题标题】:Append Slash not working附加斜线不起作用
【发布时间】:2012-03-16 19:36:30
【问题描述】:

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

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

虽然

APPEND_SLASH=True

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

有什么想法吗??

【问题讨论】:

  • 你有django.middleware.common.CommonMiddleware,安装在你的MIDDLEWARE_CLASSES吗?
  • 是的,commonMiddleware 在那里
  • 可以发回溯吗?
  • 我在这里粘贴了回溯:dpaste.org/MYLuL
  • 这个回溯看起来你的 urls.py 文件有问题——就像它里面有一个字符串而不是某个地方的 url() 元组

标签: django django-views


【解决方案1】:

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

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

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

【讨论】:

  • 正如我在问题中提到的那样,它与斜杠一起工作正常...... prb 仅在缺少斜杠时发生
  • 也许去掉了尾部的斜杠,它匹配了一个 不同的 url 模式而不是你期望的
【解决方案2】:

如果您添加了一些自己的中间件,中间件的顺序很重要。我有一个类似的情况,斜线之前工作并且添加中间件项目破坏了它。切换顺序后,一切又开始工作了。

【讨论】:

【解决方案3】:

这肯定会解决您的问题。你可以给网址加上或不带斜杠,它会给你同样需要的结果。

在 urls 文件中,

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

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

【讨论】:

  • 我认为这是最好的解决方案。
  • 不,不是因为同一页面会有两个网址。
  • 就像@Natim 所说,只是添加一些上下文:对于 SEO 来说,拥有两个 URL 而不是一个是不好的。此外,您不必围绕据称已经有解决方案的框架编写代码。
  • 请参阅morethanseven.net/2009/02/10/append-slashes-urls-django,深入讨论为什么这是一个糟糕的解决方案。
【解决方案4】:

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

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

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

(2) 或者使用url函数跳过:

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

【讨论】:

    【解决方案5】:

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

    python manage.py runserver
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-26
      • 2021-09-27
      • 1970-01-01
      • 2014-02-06
      • 2013-09-29
      • 2017-02-25
      • 2017-09-08
      • 1970-01-01
      相关资源
      最近更新 更多