6

いくつかのHTMLをDjangoテンプレートにレンダリングするGoogleAppEngineWebアプリを作成しています。ファイルを使用してテンプレートをレンダリングするか、ファイル内のものと非常によく似たjsonをレンダリングしたいと思います。Djangoを使用して、これを読み込んでデータベースに保存されるファイルにレンダリングすることは可能ですか?oldAPI.HTMLはapi.htmlの古いバージョンですが、いくつかの小さな変更が加えられています。Djangoをapi-htmlファイルにレンダリングすると正常に機能します。

GAEにファイルを保存できないことを理解しましたが、Djangoを動的に使用してメモリに保存されているHTMLにレンダリングするにはどうすればよいですか?

path = ""
oldAPI = APIVersion().get_by_key_name(version)
if oldAPI is None:
    path = os.path.join(os.path.dirname(__file__), "api.html")
template_values = {
            'responseDict': responseDict,
            }
        if path:
            self.response.out.write(template.render(path, template_values))
        else:
            self.response.out.write(template.render(oldAPI.html,template_values))
4

3 に答える 3

4

テンプレートを「メモリ内」にレンダリングするには、次のことを行う必要があります。

AppEngineのセットアップ

まず、Django用にすべてが正しく設定されていることを確認する必要があります。サードパーティのライブラリページには多くの情報がありますが、ここに記載しておきます。

main.pyまたは(スクリプトハンドラーが何であれ)に、次の行を追加する必要があります。

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

from google.appengine.dist import use_library
use_library('django', '1.2') # Change to a different version as you like

あなたのに含めることを忘れないdjangoでくださいapp.yaml

libraries:
    - name: django
      version: "1.2"

コード設定

次に、 Google App EngineテンプレートのドキュメントTemplateに示されているように、オブジェクトを作成する必要があります。例えば:

from google.appengine.ext.webapp import template

# Your code...
template_string = "Hello World"
my_template = template.Template(template_string)

# `context` is optional, but will be useful!
# `context` is what will contain any variables, etc. you use in the template
rendered_output = template.render(context)

# Now, do what you like with `rendered_output`!
于 2013-03-18T21:45:08.997 に答える
2

だけでDjangoのテキストからテンプレートをインスタンス化できますtemplate.Template(my_text)

于 2013-03-15T13:00:33.317 に答える
0

残念ながら、これを行う(組み込みの)方法はありませんが、関数google.appengine.ext.webapp.template._load_user_django(Python 2.5を使用したGAE)またはgoogle.appengine.ext.webapp.template._load_internal_django( GAE with Python 2.7)そして、GAEソースと同じように設定とレンダリングをオーバーライドする独自のラッパーを作成します。

于 2013-03-18T16:13:37.307 に答える