Обновление старого кода django / витого питона - PullRequest
0 голосов
/ 19 июня 2011

Ну, у меня есть какой-то старый код на 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 (если быть точным, link.py ), так что если что-то не имеет смысла, проверьте

также 1-я ошибка, которую я получаю от 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'] не определен после того, как обнаружил простое исправление

1 Ответ

0 голосов
/ 19 июня 2011

Мне кажется, что Context ['request'] там не подходит ... откуда взялся Context? В качестве параметра вы получаете контекст всех строчных букв. Возможно, вместо этого вы должны использовать параметр context, так что ...

а) сделать контекст ['запрос'] в контекст ['запрос']

... или, если вы уже используете контекст в нижнем регистре, и это только опечатка здесь в сообщении, тогда

b) Некоторое время я искал и нашел этот фрагмент http://djangosnippets.org/snippets/2428/..., так что, возможно, что-то подобное может сработать:

from django.template import resolve_variable

...

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