こんにちは、
私は現在、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
もう一度、ありがとう!