html head title - yield "!" + " !"
しかし、これは私には十分ではありません、私は自分自身の誤解を持ちたくない、私はちょうどPythonデザインが欲しいです。 そして、誰が自分自身を撃ち、ビジネスロジックをテンプレートに積み込みたいのですか?これは初心者にとって問題です、なぜビューコードをutils、template_tagsなどのフォルダに塗りつけて苦しむ必要があるのですか?
そして、ところで、あなたはそれを燃やすことができます-Python 3の新しいインポートメカニズムを通してテンプレートを拡張させます。 また、別のテンプレートから何かを挿入する必要がある場合は、それも機能させます。
そして、各テンプレートをジェネレーターにしましょう!
github.com/Deepwalker/backslantをご覧ください 。 彼はまだ完全には完成していませんが、フィードバックを得る必要があります。
5つのbase.bsを試してみましょう。
!doctype/ html html head title | Page Title body h1 {'class': ' '.join(['main', 'content'], 'ng-app': 'Application'} "Page Header" div.content - yield from options['content_block']() div.footer "Backslant © 2015"
ここにあるもの
doctype
は
/
で終わるため、タグは
</doctype>
閉じてはいけません。
これまでの行は
"
で始まります。タグの本文の直後に後でできるように、文法を終了する必要があります。
h1
引数は通常のpython
dict
渡されます。この辞書内で、ディクショナリ宣言に
dict
ことができる任意のコード。
さらに興味深い-いくつかの
options
ある特定の
content_block
呼び出しからの
yield from
。 私が言えることは-ここにはテンプレートパラメータの宣言がないため、
options
は
kwargs
です。 たぶん、無駄なことではないでしょうか。
したがって、
content_block
について-パラメーターでコールバックが提供されることを期待し、そこにジェネレーターがあると思います-すべてのテンプレートジェネレーターがあります。 これは、ある種のテンプレートがbase.bsを使用したいことを意味し、そのレンダーを呼び出し、そこにコールバックを渡します。
そして、これはindex.bsになります:
- from . import base :call base.render(*options) :content_block - for i in range(10): p - yield 'Paragraph {}'.format(i) :footer_block p "Index page"
ここでは、関数だけを正直に宣言して渡すのではなく、少し砂糖を使用します。
:call
は、その子ノードを反復処理し、それらがすべて関数宣言であることを確認し、それらをパラメーターにポップします。 A
:content_block
は、
content_block
という名前の引数なしの関数を宣言するだけで、同じ名前の
:call
を使用すると、引数に関数が送信されます。
そして、Pythonコードで使用できます:
import backslant sys.meta_path.insert(0, backslant.PymlFinder('./templates', hook='backslant_import')) from backslant_import.home import index for chunk in index.render(title='The Real Thing'): print(chunk)
狂った。 構文で追加するもの-関数を直接宣言できます
- def func(a=True)
など。
for
、
if
、
elif
、
else
は純粋なpythonです。 もちろん、
yield
および
yield from
使用できます。 必要なものをインポートして、好きなように使用できます。
サポートされていない-
try: except: ...
パーサーの現在のバージョンはあまりフレンドリーではないため、解析をやり直す必要があります。
次はジェネレーターです。 そして、ジェネレータは、知っているように、
next
だけでなく、
send
方法も知っています。 あなたはこれから得ることができるのは本当です、私は知りません、あなたは夢を見ることができます。 何らかの方法でデータをフィードし、出力に一部を与えることができます。
速度はjinja2と同じです。 おそらくどういうわけかオーバークロックを試すことができますが、基本的にはコードは
yield
と
yield from
で構成され、
ast
を介してコンパイルさ
yield from
、最適化するものはほとんどありません。
だからここに。 構文はまだ完了できますが、いくつかのアイデアを紹介します。
ところでアイデアはありますか? 議論しましょう。 それまでの間、プロジェクトを見ることができます。例github.com/Deepwalker/backslant/tree/master/example