GAE 및 Python에서 친숙한 URL 조회 방법을 구축하려고합니다. 아무도하지 않았습니까?Google App Engine의 친숙한 URL
나는 작동하고 있지만 매우 불안정합니다. 그것이 작동하는 방법은 경로를 취하고 (/ foo/bar /라고 가정 해 봅시다) 목록으로 분할하는 것입니다. 목록의 마지막 요소를 가져 와서 데이터베이스에서 일치하는 항목을 쿼리합니다. 이제 두통이 온다.
다른 '바'가있을 수 있지만 다른 페이지 아래에 '바'가 더 있다면, 어떻게 구별 할 수 있습니까? 지금, 내 솔루션은 '바'의 결과를 반복하고 부모 페이지의 참조 속성을 살펴 보는 것입니다. 부모 'foo'는 한 번 이상 발생할 수 있으므로 지금까지 반복해야합니다. 이 클라우드가 다수의 for 루프에 쉽게 추가되는 것을 보는 것은 어렵지 않습니다.
그냥 조금 더 악화하면 한 페이지 이상이 언어로 표시 될 수 있으며 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)
그리고 친근 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리스트. 반복하고 모든 부모를 가져 와서 일치 시키려고합니다.
지금까지는 하나의 루트 페이지와 하나의 서브 페이지에서만 작동합니다. 더 동적 인 방법과 여러 단계를 지원하는 방법을 모르겠습니다.
누구나 직접 작성했거나 좋은 제안이 있으십니까? = 말한다 섹션
가능한 중복 (http://stackoverflow.com/questions/2297056/pretty-urls-in을 가질 수 있습니다 -google-app-engine-url-rewriting) – ceejayoz
불행히도 없습니다. 내 질문에 대한 자세한 내용을 저장하고 올바르게 데이터를 얻으려면 오히려 어떻게 URL을 얻을 수 있습니다. – fredrik
여기에 정확히 목적이 무엇입니까? 직접 조회 만하는 경우 키 이름에 URL 경로를 지정하지 않는 이유는 무엇입니까? –