2

基本的にいくつかの一般的なグリッド レイアウトを実装する 2 つの Jinja2 テンプレートを作成しています。このテンプレートの「ライブラリ」を Pylons アプリと Django アプリの間で共有できるようにしたいと考えています。

Django のテンプレート コンテキストはテンプレートの「トップレベル」からアクセスできるのに対し、Pylons はコンテキストをスレッド ローカルc(またはtmpl_context) 変数内にラップするという点で、小さな障害にぶつかりました。

これを示すいくつかの類似の例を次に示します。

ジャンゴ

from django.shortcuts import render_to_response

ctx = {}
ctx['name'] = 'John'

return render_to_response('hello.html', ctx)

こんにちは.html:

Hello {{ name }}

パイロン

from pylons import tmpl_context as c
from myapp.lib.base import render

c.name = 'John'
return render('hello.html') 

こんにちは.html:

Hello {{ c.name }}

私がやろうとしているhello.htmlのは、両方のフレームワークで同じになるようにすることです。

私が見ている 1 つの方法は、Djangorender_to_responseをラップして次のようにすることです。

ctx['c'] = ctx

しかし、それは正しくないと感じています。これに代わる他の方法を見た人はいますか?

ありがとう

4

1 に答える 1

1

Pylons のバージョンの日付は? renderを支持して廃止されたようですrender_jinja2。確かに、Jinja2 のドキュメントでは と誤ってラベル付けされてrender_jinjaおり、Pylons のドキュメントではまったく表示されていませんが、Pylons 1.0 のソース コードにはそれが含まれており、その使用法が暗示されています。

または、古いバージョンの Pylons に行き詰まっている場合は、 settingc.nameが settingc.__dict__['name']と同じであり、そのすべての属性についても同様であるという事実を利用できます。これにより、ctx dict が手元にあれば、c のすべての属性を簡単に設定できます。

ctx = {'name': 'John'}

# Django
from django.shortcuts import render_to_response
render_to_response('hello.html', ctx)

# old Pylons?
from pylons import tmpl_context as c
from pylons.templating import render
c.__dict__.update(ctx)
render('hello.html')

# new Pylons
from pylon.templating import render_jinja2
render_jinja2('hello.html', ctx)

また、インポートしたオブジェクトの名前に基づいて、古い Pylons がテンプレート内の変数に名前を付けたことにも驚きました。c が の引数として渡されていないことは確かrenderですか?

免責事項: Django または Pylons がインストールされていないため、私の提案をテストすることはできません。

于 2010-06-17T09:22:02.860 に答える