【问题标题】:Python 2.7->2.6 problemsPython 2.7->2.6 问题
【发布时间】:2013-11-28 21:22:06
【问题描述】:

我是 Python 和 Django 的初学者。

我正在设置一个我在本地编写的程序。在几乎完成让应用程序在服务器上运行之后,我了解到服务器运行的是 python 2.6,而我的本地系统运行的是 2.7。从 url 检索参数时,这似乎给我带来了问题。

我正在使用 Openshift 的服务器。我对服务器了解不多,但我目前的设置是我有一个文件的本地克隆,我在本地处理所有内容,并通过 git 将它们推送到服务器。使用 Openshift 界面内部的预定义快速设置来设置服务器。

我正在使用以下 urlpattern,它在我的计算机上本地运行良好。

   url(r'^website/(?P<url>[:\w/\-.]+)$', 'page'),

但是,在我的服务器版本上,我遇到了一些问题。以下 url 将两个不同的 url 返回到视图,具体取决于我是在服务器上还是在本地运行。

    #when using this url
    website/http://example.com

    #local view called page, retrives this argument 
    http://example.com

#server version retrieves almost the same, but with one / in the beginner less. 
http:/example.com

在我看来,反斜杠在某处被砍掉了。如何更改它以解析带有两个反斜杠的参数?

    # the receiving view
    def page(request, url):
        p = Page.objects.get(url=url)
    domain = p.website.url
    return render_to_response('seo/page.html', {'domain': domain, 'page': p},    context_instance=RequestContext(request)) 

本地版本返回所需的页面就好了。服务器版本返回:

     DoesNotExist at /website/http:/coverme.dk/collections/iphone-sleeves-covers

我注意到这里缺少 http:// 中的一个反斜杠,并假设错误是基于它被错误地发送到视图。

我刚刚用本地版本的数据库中不存在的url进行了测试,它正确显示了错误消息。

我还仔细检查了 url='http://coverme.dk/collections/iphone-sleeves-covers' 的对象是否确实存在。我也和其他几个人核实过。

我已经尝试过处理输入网址,它似乎工作得很好,除非我使用双倍或三倍更多的反斜杠。在第一个反斜杠之后的所有反斜杠都在 url 中被忽略。

/website/http://////coverme.dk////collections/iphone-sleeves-covers 
#gives the same as 
/website/http:/coverme.dk/collections/iphone-sleeves-covers. 

非常感谢任何形式的帮助。一些可以帮助我的文档的链接也将不胜感激。

编辑:更新 django 解决了这个问题。

【问题讨论】:

  • 您是否100%确定在本地和生产之间的请求 URL 中使用相同的路径?因为 Python 2.6 和 2.7 版本之间的正则表达式引擎没有改变,所以不会造成这样的差异。
  • 无论是什么导致了差异,我现在可以在这里告诉你,那个 url 模式不是问题。
  • 您是否尝试过在本地开发服务器的数据库中使用不存在的 URL?也许错误消息在 Python 2.6 和 2.7 上都错误地构造了 URL。
  • 您是否 100% 确定 url='http://coverme.dk/collections/iphone-sleeves-covers' 的对象确实存在于生产服务器上的数据库中?
  • 最后但同样重要的是,Django 的版本是否相同?并考虑到配置错误的前端服务器可能会改变 URL 的解释方式。我们可以看到您请求的确切网址吗? URL 参数中的斜杠是否正确转义?

标签: python django python-2.7 python-2.6


【解决方案1】:

来自问题作者a comment

使用 /website/http%3A%2F%2Fcoverme.dk%2Fcollections%2Fiphone-sleeves-covers 作为 url 返回: The requested URL /website/coverme.dk/collections/iphone-sleeves-covers was not found on这台服务器。服务器上的 Django 版本是 1.4,本地使用的是 1.5.1。我仍然不明白为什么我在本地和服务器上看到不同的结果,但我开始认为我应该切换到不使用 //?

的 url 模式

更新 Django 为我解决了这个问题

【讨论】:

  • 在我意识到您在问题中引用了 OP 之前,我只是将此标记为 不是答案。如果您将其设为社区 wiki 并为其提供更多背景信息会更好。
猜你喜欢
  • 2019-06-26
  • 2015-05-17
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2013-01-22
  • 2015-01-18
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多