【问题标题】:Updating old django/twisted python code更新旧的 django/twisted python 代码
【发布时间】:2011-06-18 22:34:47
【问题描述】:

好吧,我有一些旧的 python 代码似乎不能正常工作,我已经研究到互联网的尽头,试图找到一个修复方法。

def getURL(self, context):
    # Make this an absolute URL- currently it's required for
    # links placed in the RSS and XML feeds, and won't
    # hurt elsewhere.
    req = context['request']                                                                         
    port = req.host[2]
    hostname = req.getRequestHostname()
    if req.isSecure():
        default = 443
    else:
        default = 80
    if port == default:
        hostport = ''
    else:
        hostport = ':%d' % port
    path = posixpath.join('/stats',
                          *(tuple(self.target.pathSegments) + self.relativePathSegments))
    return quote('http%s://%s%s%s' % (
        req.isSecure() and 's' or '',
        hostname,
        hostport,
        path), "/:")

现在我认为它只是 context['request'] 给我带来的问题,但我不确定。 这个代码块来自CIA.vc project(确切地说是link.py),所以如果有什么不合理的地方请检查

我从 python 得到的第一个错误是:

File "/home/justasic/cia/cia/LibCIA/Web/Stats/Link.py", line 41, in getURL port = req.host[2] exceptions.TypeError: unindexable object

但在我发现我认为是一个简单的修复后,我得到了更多关于 context['request'] 未定义的信息

【问题讨论】:

  • 能否举一个稍微具体一点的例子来说明您预期会发生什么、失败了什么以及它发生的迹象?
  • 我得到的第一个错误是File "/home/justasic/cia/cia/LibCIA/Web/Stats/Link.py", line 41, in getURL port = req.host[2] exceptions.TypeError: unindexable object,但在我发现我认为是一个简单的修复后,我得到了更多关于context['request']的信息
  • 除非您在本次对话结束时开始更加努力,否则我们没有理由为此而努力。该例程在处理请求的确切位置发生在哪里?这是模板标签的一部分吗?这种背景是从哪里来的?它是 Django 上下文对象吗?那是一个 Twisted Request 对象吗?这是为哪个版本的 Twisted 创建的?你现在用的是什么版本? Django的同样问题。等等等等等等。
  • @Peter 老实说,我对它的工作原理一无所知,我使用 CIA 作为起点,因为它曾在 IRC 中使用。我知道@andzep 的答案可能有效,但我不能直接将 django 代码包含到文件中,这导致我假设它的一部分是扭曲的。我知道它至少是为 Twisted 8.0.0 或更早版本创建的,所以它的代码非常旧,我会说 Django 是同一时代。很抱歉,我不是很有帮助,但我正在尽力而为,如果有帮助,我会在此处提供完整的错误输出:pastebin.com/g8QfqDUQ,我一直在寻找调用此函数的位置但找不到它。
  • 好吧,看来我只需要它来获取请求请求的端口。我只用80 替换了req.host[8],它工作得很好..

标签: python django twisted twisted.web twisted.internet


【解决方案1】:

在我看来 Context['request'] 不适合那里... Context 来自哪里?作为参数,您将获得所有小写的上下文。可能您应该改用参数“上下文”,所以...

a) 将 Context['request'] 转换为 context['request']

...或者,如果您已经在使用小写的上下文,而这只是帖子中的一个错字,那么

b) 我搜索了一段时间,发现了这个 sn-p http://djangosnippets.org/snippets/2428/... 所以也许这样的东西可能有用:

from django.template import resolve_variable

...

def getURL(self, context):
    req = resolve_variable('request', context)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    相关资源
    最近更新 更多