Форум сайта python.su
подскажите, при использовании traversal мне необходимо самому обрабатывать весь url или есть какой-нить “механизм наследования”?
допустим у нас есть урл вида: “site.ru/blog/page/10” следовательно классы для траверсала выглядят как:
Root() -> Blog() -> Page()
т.е. мне необходимо определить функцию __getitem__ в классах root,blog и pag, и в этой функции делать обработку урл, если url содержит ‘blog’ то __getitem__ возвращает класс блог и т.д.(имеется ввиду что самостоятельно делать разбор всех урл)?
может есть какой-то механизм, использование которого исключит необходимость постоянного ручного парсинга урл?
Офлайн
«постоянный ручной парсинг урл» — это что?
Офлайн
Андрей Светловимею ввиду написание функции __getitem__
«постоянный ручной парсинг урл» — это что?
Офлайн
используйте dict — в нем __getitem__ уже есть
Офлайн
Может я ошибаюсь, но на сколько я помню в __getitem__ Вам не URL приходит а конкретный traverse key:
Т.е. в Вашем примере “site.ru/blog/page/10” В __getitem__ обьекта Root прийдет “blog” и ничего парсить не нужно …
Офлайн
Sleepwalkerвсе правильно.
Может я ошибаюсь, но на сколько я помню в __getitem__ Вам не URL приходит а конкретный traverse key:
Т.е. в Вашем примере “site.ru/blog/page/10” В __getitem__ обьекта Root прийдет “blog” и ничего парсить не нужно …
Отредактировано (Окт. 28, 2011 11:48:16)
Офлайн
Небольшое замечание, когда при траверсе обьект не найден,
def __getitem__(self, key):
self.key = key
if 'page' == key:
return _setowner(Page(self.request,key), key.encode(), self);
else:
raise KeyError(key)
config.add_view(notfound_view, context=NotFound)
Отредактировано (Окт. 31, 2011 09:25:50)
Офлайн
Sleepwalkerспасибо.
Небольшое замечание, когда при траверсе обьект не найден,лучше райзить pyramid.exceptions.NotFound для которого потом добавить вью с соответствующей страницей.def __getitem__(self, key):
self.key = key
if 'page' == key:
return _setowner(Page(self.request,key), key.encode(), self);
else:
raise KeyError(key)config.add_view(notfound_view, context=NotFound)
Офлайн