ホームページ  >  記事  >  バックエンド開発  >  Python で Web 要素の生成を分析しやすくする方法

Python で Web 要素の生成を分析しやすくする方法

WBOY
WBOYオリジナル
2016-06-16 08:47:44976ブラウズ

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. 使用できます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。