質問

グッドアフタヌーン、

現在、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))

したがって...(コメントなどを含む)[表示]ページに移動するには、次の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

また、ありがとう!

役に立ちましたか?

解決

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

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

詳細については、キーに関するクエリをご覧ください。 App Engineドキュメントで。

写真を事前定義されたキーで保存していますか

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

その後、ViewPageで取得できます:

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

キーを使用してエンティティを取得をご覧ください。 。

最後に、appengineが割り当てたキーに基づいて写真を取得し、このキーがURLに存在すると仮定します( eg http:// host / b / img / ahByY。 .. なので、このフォームのURLを生成するようにテンプレートを変更してください)、使用

class ViewPage(webapp.RequestHandler):
  def get(self, id):
    photos = [ db.get(id) ]
    ...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top