Я пробовал и пробовал в течение нескольких часов теперь и должен быть простой способ получить 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 для регистрации вопроса, обычно я только считал его для решения проблем, которые я имею.
Вы получаете эту ошибку, потому что ProgramViewHandler.get()
вызывается без параметра slug
.
Скорее всего, вам нужно исправить сопоставление URL в файле main.py
. Ваше отображение URL, вероятно, должно выглядеть примерно так:
application = webapp.WSGIApplication([(r'/(.*)', ProgramViewHandler)])
Скобки указывают на группировку регулярных выражений. Эти совпадающие группы передаются вашему обработчику в качестве аргументов. Так, в приведенном выше примере все в URL, следующее за начальным "/", будет передано параметру ProgramViewHandler.get()
slug
.
Подробнее об отображениях URL в webapp здесь.
Если вы делаете так:
obj = MyClass()
obj.foo(3)
Метод foo в MyClass вызывается с двумя аргументами:
def foo(self, number)
В качестве первого параметра передается объект, на котором он вызывается.
Возможно, вы вызываете get() статически (т.е. делаете ProgramViewHandler.get()
вместо myViewHandlerVariable.get()
), или вам не хватает параметра.