문제

좋은 오후에요,

저는 현재 Google Appengine 내부에서 엄청나게 간단한 것을 구축하려고합니다. 목표는 iPhone 응용 프로그램에 다시 연결될 간단한 사진 공유 응용 프로그램을 구축하는 것입니다. 그것은 모두 파이썬과 목표 c에 대한 학습 경험입니다.

(저는 꽤 오랫동안 PHP 프로그래머였습니다).

목표, 다음과 같이 보이는 URL을 만듭니다 : /img /{{model.key.id}}

문제는 Python 스크립트를 어떻게 수행하든 오류로 끝나거나 For Statement에 래핑 한 템플릿 페이지에 표시 할 것이 없다는 것입니다.

내 app.yaml 파일 :

application: randomwebappname
version: 1
runtime: python
api_version: 1

handlers:
- url: /media
  static_dir: media

- url: /b/.*
  script: beta.py
  login: required

- url: /.*
  script: main.py

내 모델 (내부 Beta.py) :

class Photo(db.Model):
    author = db.StringProperty()
    title = db.StringProperty()
    slugline = db.StringProperty()
    content = db.StringProperty(multiline=True)
    coordinates = db.StringProperty()
    avatar = db.BlobProperty()
    date = db.DateTimeProperty(auto_now_add=True)

이미지 페이지를보기위한 수업 :

class ViewPage(webapp.RequestHandler):
def get(self, id):


template_values = {
    'image': image,
}

path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
self.response.out.write(template.render(path, template_values))

나는 수업에서 다음을 모두 시도했지만 모두 실패로 끝납니다. URL에서 key, key.name 및 key.id로 시도했습니다.

photos = db.Query(Photo).filter('key', slug).fetch(limit=1)

photos = Photo.get_by_key_name(id)

photos = Photo.get_by_key_name(key)

key = db.Key.from_path('Photo', id) 

photos = db.GqlQuery("SELECT * FROM Photo WHERE __key__ = :key", key=key)

photos = db.get(photo_key)

photos = self.request.get("id")

내 URL :

application = webapp.WSGIApplication([
    ('/b/', HomePage),
    ('/b/upload', UploadPage),
    ('/b/add', MainPage),
    ('/b/img', Image),
    ('/b/img/([-\w]+)', ViewPage),
    ('/b/submit', Submission)
], debug=True)

템플릿 쿼리 :

{% for photo in photos %}
<img alt="" title="" src="img?img_id={{ photo.key }}" alt="main image" />
{% endfor %}

이것은 엄청나게 단순한 것 같아서 내가 뭔가를 놓치고 있다는 것을 알고 있지만 어디에 있는지 잘 모르겠습니다. 나는 이것을 PHP로 쓸 것이지만, 나는 Appengine의 개념을 좋아하고 위에서 말한 것은 좋은 Python 학습 경험입니다.

참고 로이 응용 프로그램은 사이트의 홈페이지에서 작동합니다. 단순히 GQL 쿼리가 있고 이미지가 정상적으로 출력되며 /IMG /ID 페이지로 이동하면 실패합니다.

조언 녀석 (및 여자)? 미리 감사드립니다!

업데이트 #1:
Jonathan의 요청에 따라 다음은 이미지 클래스입니다.

class Image (webapp.RequestHandler):
    def get(self):
        photo = db.get(self.request.get("img_id"))
        if photo.avatar:
            self.response.headers['Content-Type'] = "image/png"
            self.response.out.write(photo.avatar)
        else:
            self.response.out.write("No image")

또한이 글을 게시 한 후 실제 이미지로 /IMG를 작성하려고 할 때 이것이 문제의 일부라는 것을 깨달았습니다. 나는 이것을 변경했고 이제는 작업 모델이 있습니다. 그러나 키를 기반으로합니다. key.id :

URL :

('/b/i', ViewPage)

새 뷰 페이지 클래스 :

class ViewPage(webapp.RequestHandler):
    def get(self):
    image = db.get(self.request.get("id"))  

    template_values = {
        'image': image,
    }

    path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
    self.response.out.write(template.render(path, template_values))

그래서 ...보기 페이지 (주석 등 포함)로 이동하려면 이제 다음 url : /b /i? img_id = {{image.key}}로 이동해야합니다.

Atlest Page가 지금 작동하고 있지만 위에서 언급 한대로 다음과 같이 페이지가 다음과 같이 보이는 것을 선호합니다 :/b/img/{{image.key.id}}.

업데이트 #2 : ViewPage 클래스 업데이트 및 URL의 업데이트 :

class ViewPageV2(webapp.RequestHandler):
    def get(self, id):
    images = [ db.get(id) ]

    template_values = {
        'image': image,
    }

    path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
    self.response.out.write(template.render(path, template_values))

새로운 URL : ( '/b/image/([- w]+)', viewpagev2),

다음은 하나의 스크린 샷이 ID "1"증명 인 "1"기존과 현재 오류가있는 스크린 샷입니다.

Alt Text http://img215.imageshack.us/img215/9123/screenshot20091130at937.png

Alt Text http://img215.imageshack.us/img215/2207/screenshot20091130at938.png

다시, 감사합니다!

도움이 되었습니까?

해결책

그들 모두를 잡는 간단한 방법 :

photos = Photo.gql('ORDER BY __key__')

자세한 내용은 참조하십시오 키의 쿼리 앱 엔진 문서에서.

사진을 저장하고 있습니까? 사전 정의 된 키?

photo = Photo(key_name="xzy123")
photo.put()

그런 다음 뷰 페이지에서 검색 할 수 있습니다.

photos = [ Photo(key_name="%s" % id) ]

보다 열쇠를 사용하여 엔티티를 얻습니다.

마지막으로, Appengine 제공 키를 기반으로 사진을 검색 하고이 키가 URL에 있다고 가정합니다.예를 들어, http://host/b/img/ahByY...,이 양식의 URL을 생성하려면 템플릿을 변경하십시오)

class ViewPage(webapp.RequestHandler):
  def get(self, id):
    photos = [ db.get(id) ]
    ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top