2014-08-29 3 views
0

페이지의 URL을 통해 제공되는 매개 변수를 기반으로 데이터 저장소에서 레코드를 가져와야하는 Google App Engine에 페이지가 있습니다. 페이지의 URL은 http://example.appspot.com/page/WILDCARD/처럼 보입니다. 여기서 WILDCARD는 레코드에 대한 고유 한 식별자 (32 자의 16 진수 문자열)입니다. 그런 다음 WILDCARD에서 지정한 레코드를 가져 와서 템플릿 page.html에 표시하거나 적어도 그렇게해야합니다. 페이지에 http://example.appspot.com/page/WILDCARD/으로 액세스 할 때마다 404 오류가 발생합니다. 누가 왜/왜 다른 사람이 이유가 될지에 대한 이유를 알 수 있습니까? 감사. 내 WSGI 클래스 처리기에서Appengine 와일드 카드 URL 문제

, 나는

('/page/([^/]+)/', PageHandler), 

이 있고 PageHandler 클래스 자체는

class PageHandler(webapp2.RequestHandler): 
    def get(self, recordID): 
      allrecords = db.GqlQuery("SELECT RECORD FROM RECORDS WHERE recordid = :record",record = recordID) 
      if not allrecords: 
       self.redirect("../") #the URL is screwed up, so we're redirecting you back to the main page 
      else: 
       for row in allrecords: 
        template = JINJA.get_template("page.html") 
        self.response.out.write(template.render({ "recordtext":row.RECORD, "recordid":recordID })) 

추가 사항입니다 : JINJA가 나는 아무것도 확신 해요, 그냥 기본 신사 환경입니다 그걸로 잘못 됐어. RECORDSRECORD, 텍스트 속성 및 recordid 문자열 속성이있는 db.Model 유형 클래스입니다. 현재 데이터가 없습니다.

편집 : 신경 쓰지 마라, 나는이 문제를 해결했다. 문제를 단순화 할 때 그것은 내 자신의 어리 석음이었습니다. 실제 구현시 (예 :이 예제의 복잡한 버전), 필자는 내 URL이 무엇이고 실제로/page /가 무엇인지에 대해 약간의 불일치가 있음을 확인했습니다. 사과.

+0

app.yaml도 연결할 수 있습니까? 나는 리다이렉트가 제대로 거기에 놓이지 않을 수도 있다고 생각한다. – Patrice

+0

내 애플리케이션 제목이 간단한 예에서 꽤 다르지만,이 페이지 핸들러와 관련된 내 YAML의 설정에서 유일하게 라인은 다음과 같습니다 - URL :. * 스크립트 보안 main.app : 실제로 사용 항상 – user3059347

답변

1

는 경로 정의에

webapp2.Route('/page/<recordID>/', handler=PageHandler) 

을보십시오.

당신 같은 다른 경로 튜플을 따라 삽입 할 수 있습니다 :

app = webapp2.WSGIApplication([ 
    ('/', Homepage), 
    webapp2.Route('/page/<recordID>/', handler=PageHandler), 
    ('/otherpage', SomeOtherPage) 
]) 

당신은 적절한 정규식으로 잘뿐만 아니라 작동 할 수 있지만 내가 예상 경로와 이름을 정의하는 템플릿 URL을 사용하면보다 쉽게 ​​코드를 읽을 찾을 무엇 그들. https://webapp-improved.appspot.com/guide/routing.html

+0

' app = webapp2.WSGIApplication ([urls and handlers]의 튜플)을 기본 Appengine Python 튜토리얼에서 사용 된 나의 애플리케이션 정의로 사용한다. 위 페이지를 사용하는 방법을 말해 줄 수 있습니까?/WSGIApplication 메소드와 함께 사용하기 위해 위 페이지를 사용하거나 리소스를 수정하기 위해 리소스에 링크 해주세요. 미안해, 나는 appengine에 약간의 멍청한 놈이야! – user3059347

+0

다른 튜플에이 라인을 삽입하기 만하면, 여기서는 코드를 작성할 수 없기 때문에 업데이트 된 답변을 볼 수 있습니다. –

+0

흠, 이상하게도 페이지의 결과는 404입니다. – user3059347

0

신경 끄시 고, 내가 문제를 해결 :

더 참조하십시오. 문제를 단순화 할 때 그것은 내 자신의 어리 석음이었습니다. 실제 구현시 (예 :이 예제의 복잡한 버전), 필자는 내 URL이 무엇이고 실제로/page /가 무엇인지에 대해 약간의 불일치가 있음을 확인했습니다. 사과.