1.CSSを引用します。これはおそらく、特定の要素に特定のスタイルを定義する最も一般的な方法です。したがって、これを使用するには、HTML ページに タグを追加する必要があります。 2. jsを導入します。動的な表示効果や要素のカプセル化など、多くの特殊効果は JavaScript を通じて処理することもできます。 を使用するには、
{{ htmlbuf } を追加する必要があります。これは、各スニペット クラスのクラス属性を収集するために使用されます。ここで Snippet オブジェクトを htmlbuf に追加します。同時に、呼び出し元にスニペットの HTML コードも出力されます。
出力方法は?まず、uliweb のテンプレートは Python コードに変換され、out オブジェクトが組み込まれており、そのメソッドを呼び出して
HTML コードを出力できます。次に、テンプレートを呼び出す前に htmlbuf オブジェクトが作成され、テンプレートを呼び出した後に処理され、作成時に out の write
属性が渡されます。これらはすべて、SImpleFrame.py のプラグイン メソッドを通じて実装されますが、これは次のような呼び出しポイントを定義するだけです:
fname, code = template.render_file(filename, vars, env, dirs)
out = template.Out()
template._prepare_run(vars, env, out)
callplugin(self, 'before_render_template', env, out)
if isinstance(code, (str , unicode) ):
code =compile(code, fname, 'exec')
env の実行コード、vars
text = out.getvalue()
output = execplugin(self, 'after_render_template ', text 、vars、env)
before_render_template はテンプレートを呼び出す前に呼び出されます。 after_render_template は、テンプレートを呼び出した後に呼び出されます。したがって、
プラグインのメカニズムを通じて追加の処理を追加できます。これは、settings.py で次のように定義されます。
@plugin('before_render_template')
def before_render_template(sender, env, out):
from uliweb.core import js
from uliweb.core.SimpleFrame import url_for
from uliweb.helpers import htmlwidgets
htmlbuf = js.HtmlBuf(write=out.noescape, static_suffix=url_for('Portal.views.static',
ファイル名) =''))
env['htmlbuf'] = htmlbuf
env['htmlwidgets'] = htmlwidgets
ここでは、htmlbuf と htmlwidgets がテンプレートの env 環境に挿入されるため、使用するテンプレートで直接使用できます。一部のスニペットは htmlwidgets で
定義されています。 htmlbuf が作成されると、out.noescape メソッドが使用されます。このメソッドはスニペット内のコードをエスケープしません。 static_suffix は静的ファイルのプレフィックスを表し、デフォルトは /static/ です。ここでは静的サービスが使用されるため、静的 URL プレフィックスは url_for
を通じて取得されます。
@plugin('after_render_template')
def after_render_template(sender, text, vars, env):
import re
r_links = re.compile('
]|(.*?)["s>]', re.I) if 'htmlbuf' in env: htmlbuf = env['htmlbuf'] if htmlbuf.modified: b = re.search('(?i)', text) if b: pos = b.start() > #findリンク links = [x or y for x, y in r_links.findall(text[:pos])] htmlbuf.remove_links(links) t = html buf.render() if t : return ''.join([text[:pos], t, text[pos:]]) else: return t+text return text 这里モジュールの処理が完了した後、生成された HTML テキストの がチェックされ、対応する情報がその先頭に追加されます。 はこれらの処理を通過し、スニペットのみを指定するだけで、Uliweb が自動的に css、js の接続を処理し、HTML コードが含まれます。 の生成。したがって、単一の: {{ htmlbuf }} 来 私はこの HTML ウィジェットをゆっくりと展開します。 もう一度説明します。 構成方法: 1. settings.py 内 INSTALLED_APPS = ['Documents', 'Examples', 'Portal', 'Post', 'uliweb.builtins.auth', 'uliweb.helpers.htmlwidgets'] 这里要追加'uliweb.helpers.htmlwidgets',让静的目录生效 2. 追加: @plugin('before_render_template') def before_render_template(sender, env, out): と @plugin('after_render_template') def after_render_template(sender, text, vars, env): 3. 使用できます。