Я пытаюсь создать удобный метод поиска URL-адресов в GAE и Python. Кто-нибудь это сделал?Дружественные URL-адреса в Google App Engine
У меня есть работа, но она очень ОЧЕНЬ шаткая. Как это работает, так это то, что он принимает путь (скажем,/foo/bar /) и разбивает его на список. Принимает последний элемент в списке и запрашивает базу данных для соответствия. Теперь наступает какая-то головная боль.
Если есть еще один «бар», так как может быть другой «бар», но под другой страницей, как рассказать друг другу? На данный момент мое решение состоит в том, чтобы перебрать результат «bar» и посмотреть на свойство ссылки на его родительскую страницу. Родительский «foo» также мог бы произойти более чем один раз, поэтому теперь мы должны перебирать это значение. Нетрудно видеть, что это облако легко складывается для большого числа циклов.
Просто, чтобы сделать его немного хуже, одна страница может быть на более чем одном языке, а URL-адрес должен соответствовать дающему языку.
Моя текущая настройка хранилищу это:
## Class to store pages.
class Pages(db.Model):
name = db.StringProperty()
## Some more properties for storing content
parentKey = db.SelfReferenceProperty()
## Class to store friendly url path segments
class UrlProvider(db.Model):
name = db.StringProperty()
path = db.StringProperty()
langCode = db.StringProperty()
page = db.ReferenceProperty(Pages)
и принести страницу с помощью firendly URL:
pageFromUrl = UrlProvider.gql('WHERE path = :path AND langCode = :lang', path = path, lang = templateObject.lang).fetch(100)
for pageUrl in pageFromUrl:
parentFromUrl = UrlProvider.gql('WHERE page = :page AND langCode = :lang', page = pageUrl.page.parentKey, lang = templateObject.lang).fetch(100)
for parentUrl in parentFromUrl:
if parentUrl.path == templateObject.path[-2]:
templateObject.url = parentUrl.path + '/' + path
page = pageUrl.page
Что это, оно извлекает из UrlProvider все, что соответствует последний элемент список templateObject.path. Итерации над ним и выборки всех родителей и попытка сопоставить его.
В настоящее время он работает только для одной корневой страницы и одной подстраницы. Я не знаю, как сделать его более динамичным и поддерживать несколько уровней.
Кто-нибудь написал свои собственные или у вас есть хорошие предложения?
возможный дубликат [Довольно URL-адреса в Google App Engine/URL переписывания] (http://stackoverflow.com/questions/2297056/pretty-urls-in -google-app-engine-url-rewriting) – ceejayoz
К сожалению нет. Мой вопрос о том, как правильно хранить и получать данные, а не как получить URL-адрес. – fredrik
В чем же цель? Если вы просто делаете прямой поиск, почему бы просто не сделать ключевое имя URL-адресом? –