Найти - Пользователи
Полная версия: Pyramid - Traversal
Начало » Pyramid / Pylons / TurboGears » Pyramid - Traversal
1
vkg2
подскажите, при использовании traversal мне необходимо самому обрабатывать весь url или есть какой-нить “механизм наследования”?
допустим у нас есть урл вида: “site.ru/blog/page/10” следовательно классы для траверсала выглядят как:
Root() -> Blog() -> Page()
т.е. мне необходимо определить функцию __getitem__ в классах root,blog и pag, и в этой функции делать обработку урл, если url содержит ‘blog’ то __getitem__ возвращает класс блог и т.д.(имеется ввиду что самостоятельно делать разбор всех урл)?
может есть какой-то механизм, использование которого исключит необходимость постоянного ручного парсинга урл?
Андрей Светлов
«постоянный ручной парсинг урл» — это что?
vkg2
Андрей Светлов
«постоянный ручной парсинг урл» — это что?
имею ввиду написание функции __getitem__
Андрей Светлов
используйте dict — в нем __getitem__ уже есть
Sleepwalker
Может я ошибаюсь, но на сколько я помню в __getitem__ Вам не URL приходит а конкретный traverse key:

Т.е. в Вашем примере “site.ru/blog/page/10” В __getitem__ обьекта Root прийдет “blog” и ничего парсить не нужно …
vkg2
Sleepwalker
Может я ошибаюсь, но на сколько я помню в __getitem__ Вам не URL приходит а конкретный traverse key:

Т.е. в Вашем примере “site.ru/blog/page/10” В __getitem__ обьекта Root прийдет “blog” и ничего парсить не нужно …
все правильно.
я делаю так:

class Root(object):
__name__ = None
__parent__ = None

def __init__(self, request):
self.request = request

def __getitem__(self, key):
if ‘user’ == key:
return _setowner(User(self.request), key.encode(), self);
else:
raise KeyError(key)


class User(object):
__name__ = None
__parent__ = None

def __init__(self, request):
self.request = request
self.data = request

def __getitem__(self, key):
self.key = key
if ‘page’ == key:
return _setowner(Page(self.request,key), key.encode(), self);
else:
raise KeyError(key)

и т.д..

p.s. я просто интересуюсь возможностями пирамиды.
Sleepwalker
Небольшое замечание, когда при траверсе обьект не найден,
def __getitem__(self, key):
self.key = key
if 'page' == key:
return _setowner(Page(self.request,key), key.encode(), self);
else:
raise KeyError(key)
лучше райзить pyramid.exceptions.NotFound для которого потом добавить вью с соответствующей страницей.
config.add_view(notfound_view, context=NotFound)
vkg2
Sleepwalker
Небольшое замечание, когда при траверсе обьект не найден,
def __getitem__(self, key):
self.key = key
if 'page' == key:
return _setowner(Page(self.request,key), key.encode(), self);
else:
raise KeyError(key)
лучше райзить pyramid.exceptions.NotFound для которого потом добавить вью с соответствующей страницей.
config.add_view(notfound_view, context=NotFound)
спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB