python下如何让web元素的生成更简单的分析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python下如何让web元素的生成更简单的分析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3717字,纯文字阅读大概需要6分钟。
内容图文
![python下如何让web元素的生成更简单的分析](/upload/InfoBanner/zyjiaocheng/433/7ca73c6dcab84d60ad912f3c7733e021.jpg)
页面中加入标签。
2. 引入js。许多特效也可以通过javascript来进行处理,比如动态显示效果,或对元素进行封装。使用
它你需要在HTML页面加入输出。对于css, javascript的链接可以检查是否重复。
那么如何定义web元素类和如何在模板中对其进行处理?
一个web元素类定义如下:
class Snippet(object):
css = ''
csslink = ''
jslink = ''
html = ''
js = ''
def render(self):
return ''
def __str__(self):
return self.render()
定义为类属性的将输出到HTML的头部,而render()的结果将显示在模板中调用类的地方。先看一下在模板
中调用的示例:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
输出。
如何输出?首先uliweb的模板将转为python代码,它有一个内置的out对象,可以调用它的方法来输出
HTML代码。那么htmlbuf对象将在调用模板前被创建,在调用模板后被处理,在创建时将传入out的write
属性。这一切都是在SImpleFrame.py中通过plugin方法来实现的,但是这只是定义了一个调用点,如:
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')
exec code in env, vars
text = out.getvalue()
output = execplugin(self, 'after_render_template', text, vars, env)
before_render_template 会在调用模板前被调用。after_render_template 会在调用模板后被调用。因
此你可以通过plugin机制来加入额外的处理。这是在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',
filename=''))
env['htmlbuf'] = htmlbuf
env['htmlwidgets'] = htmlwidgets
这里注入htmlbuf和htmlwidgets到模板的env环境中,所以可以在模板中直接使用。在htmlwidgets中已经
定义了一些Snippet。htmlbuf在创建时,会使用out.noescape方法,它将不会对Snippet中的代码进行转
义。static_suffix表示静态文件的前缀,缺省为/static/,这里由于使用了静态服务,所以通过url_for
来得到静态URL前缀。
@plugin('after_render_template')
def after_render_template(sender, text, vars, env):
import re
r_links = re.compile(']|<script\s.*?\ssrc\s*=\s*"?
(.*?)["\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
links = [x or y for x, y in r_links.findall(text[:pos])]
htmlbuf.remove_links(links)
t = htmlbuf.render()
if t:
return ''.join([text[:pos], t, text[pos:]])
else:
return t+text
return text
这里将在模板处理完毕后查找生成的HTML文本中的标签,然后将相应的信息插入到它的前面。同
时这里增加了对原HTML中已经存在的链接进行了判断,如果存在则删除之,这是通过remove_links来处理
的。
经过这些的处理,你只要定义一个Snippet,Uliweb将自动为你处理css, js的链接包括代码,和HTML代码
的生成。因此你就可以简单的:
{{
htmlbuf << htmlwidgets.Message('This is a test')
}}
来生成一个消息的提示信息。
我会慢慢扩展这个htmlwidgets库。
再简单描述一下如何配置:
1. 在settings.py中
INSTALLED_APPS = ['Documents', 'Examples', 'Portal', 'Post',
'uliweb.builtins.auth', 'uliweb.helpers.htmlwidgets']
这里要加入'uliweb.helpers.htmlwidgets',让static目录生效
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. 可以使用了。
内容总结
以上是互联网集市为您收集整理的python下如何让web元素的生成更简单的分析全部内容,希望文章能够帮你解决python下如何让web元素的生成更简单的分析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。