Почему делают я получаю TypeError: доберитесь (), берет точно 2 аргумента (1 данный)? Механизм Приложения Google

Я пробовал и пробовал в течение нескольких часов теперь и должен быть простой способ получить URL. Я думал, что это было путем:

#from data.models import Program

import basehandler

class ProgramViewHandler(basehandler.BaseHandler):
    def get(self,slug):
#        query = Program.all()
#        query.filter('slug =', fslug)
        self.render_template('../presentation/program.html',{})

Каждый раз, когда этот код выполнен, я получаю эту ошибку на stacktrace:

appengine\ext\webapp __ init __. py", строка 511, в вызове handler.get (*groups) TypeError: доберитесь (), берет точно 2 аргумента (1 данный)

Я сделал некоторую отладку, но этот вид отладки превышает мой уровень отладки. Когда я удаляю краткий заголовок из определения, добираются (сам, краткий заголовок), все хорошо работает.

Это - basehandler:

import os

from google.appengine.ext import webapp
from google.appengine.ext.webapp import template



class BaseHandler(webapp.RequestHandler):
    def __init__(self,**kw):
        webapp.RequestHandler.__init__(BaseHandler, **kw)

    def render_template(self, template_file, data=None, **kw):
        path = os.path.join(os.path.dirname(__file__), template_file)
        self.response.out.write(template.render(path, data))

Если бы кто-то мог бы указать на меня в правильном направлении, это было бы большим!Спасибо! Это - первый раз для меня, который будет использовать stackoverflow для регистрации вопроса, обычно я только считал его для решения проблем, которые я имею.

6
задан David Underhill 25 June 2010 в 19:14
поделиться

2 ответа

Вы получаете эту ошибку, потому что ProgramViewHandler.get() вызывается без параметра slug.

Скорее всего, вам нужно исправить сопоставление URL в файле main.py. Ваше отображение URL, вероятно, должно выглядеть примерно так:

application = webapp.WSGIApplication([(r'/(.*)', ProgramViewHandler)])

Скобки указывают на группировку регулярных выражений. Эти совпадающие группы передаются вашему обработчику в качестве аргументов. Так, в приведенном выше примере все в URL, следующее за начальным "/", будет передано параметру ProgramViewHandler.get() slug.

Подробнее об отображениях URL в webapp здесь.

9
ответ дан 10 December 2019 в 00:32
поделиться

Если вы делаете так:

obj = MyClass()
obj.foo(3)

Метод foo в MyClass вызывается с двумя аргументами:

def foo(self, number)

В качестве первого параметра передается объект, на котором он вызывается.

Возможно, вы вызываете get() статически (т.е. делаете ProgramViewHandler.get() вместо myViewHandlerVariable.get()), или вам не хватает параметра.

1
ответ дан 10 December 2019 в 00:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: