3

こんにちは、

私は現在、Google AppEngine 内で信じられないほど単純なものを構築しようとしています。目標は、私の iPhone アプリケーションに接続する単純な写真共有アプリケーションを構築することです。これはすべて、Python と Objective-C の両方の学習体験です。

(私はかなり長い間PHPプログラマーでした)。

目標は、次のような URL を作成することです: /img/{{ model.key.id }}

問題は、Python スクリプトをどのように実行しても、エラーが発生するか、FOR ステートメントでラップされたテンプレート ページに何も表示されないように見えることです。

私の 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 :
ジョナサンの要求によると、以下は Image クラスです。

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を実行し、ビューページを表示するために/img/を実行しようとしていたため、これが問題の一部であることに気付きました。それ以来、これを変更し、現在は機能するモデルを持っています。ただし、key.id ではなく Key に基づいています。

URL:

('/b/i', ViewPage)

新しい 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))

つまり... View ページ (コメントなどを含む) にアクセスするには、次の URL にアクセスする必要があります: /b/i?img_id={{ image.key }}

少なくともページは機能していますが、上記のようにページを次のように表示することをお勧めします: /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),

以下は 2 つのスクリーンショットで、1 つは ID "1" が存在する証拠であり、現在発生しているエラーです。

代替テキスト http://img215.imageshack.us/img215/9123/screenshot20091130at937.png

代替テキスト http://img215.imageshack.us/img215/2207/screenshot20091130at938.png

もう一度、ありがとう!

4

1 に答える 1

3

それらをすべて取得する簡単な方法:

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

詳細については、App Engine ドキュメントのキーに対するクエリを参照してください。

定義済みのキーを使用して写真を保存していますか?

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

次に、ViewPage でそれを取得できます。

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) ]
    ...
于 2009-11-29T21:18:52.813 に答える