html建立discuz 模板调用函数后调用链接改变

使用模板 - 廖雪峰的官方网站
Web框架把我们从WSGI中拯救出来了。现在,我们只需要不断地编写函数,带上URL,就可以继续Web App的开发了。
但是,Web App不仅仅是处理逻辑,展示给用户的页面也非常重要。在函数中返回一个包含HTML的字符串,简单的页面还可以,但是,想想新浪首页的6000多行的HTML,你确信能在Python的字符串中正确地写出来么?反正我是做不到。
俗话说得好,不懂前端的Python工程师不是好的产品经理。有Web开发经验的同学都明白,Web App最复杂的部分就在HTML页面。HTML不仅要正确,还要通过CSS美化,再加上复杂的JavaScript脚本来实现各种交互和动画效果。总之,生成HTML页面的难度很大。
由于在Python代码里拼字符串是不现实的,所以,模板技术出现了。
使用模板,我们需要预先准备一个HTML文档,这个HTML文档不是普通的HTML,而是嵌入了一些变量和指令,然后,根据我们传入的数据,替换后,得到最终的HTML,发送给用户:
这就是传说中的MVC:Model-View-Controller,中文名“模型-视图-控制器”。
Python处理URL的函数就是C:Controller,Controller负责业务逻辑,比如检查用户名是否存在,取出用户信息等等;
包含变量{{ name }}的模板就是V:View,View负责显示逻辑,通过简单地替换一些变量,View最终输出的就是用户看到的HTML。
MVC中的Model在哪?Model是用来传给View的,这样View在替换变量的时候,就可以从Model中取出相应的数据。
上面的例子中,Model就是一个dict:
{ 'name': 'Michael' }
只是因为Python支持关键字参数,很多Web框架允许传入关键字参数,然后,在框架内部组装出一个dict作为Model。
现在,我们把上次直接输出字符串作为HTML的例子用高端大气上档次的MVC模式改写一下:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
return render_template('home.html')
@app.route('/signin', methods=['GET'])
def signin_form():
return render_template('form.html')
@app.route('/signin', methods=['POST'])
def signin():
username = request.form['username']
password = request.form['password']
if username=='admin' and password=='password':
return render_template('signin-ok.html', username=username)
return render_template('form.html', message='Bad username or password', username=username)
if __name__ == '__main__':
Flask通过render_template()函数来实现模板的渲染。和Web框架类似,Python的模板也有很多种。Flask默认支持的模板是,所以我们先直接安装jinja2:
$ easy_install jinja2
然后,开始编写jinja2模板:
用来显示首页的模板:
&title&Home&/title&
&h1 style=&font-style:italic&&Home&/h1&
用来显示登录表单的模板:
&title&Please Sign In&/title&
{% if message %}
&p style=&color:red&&{{ message }}&/p&
{% endif %}
&form action=&/signin& method=&post&&
&legend&Please sign in:&/legend&
&p&&input name=&username& placeholder=&Username& value=&{{ username }}&&&/p&
&p&&input name=&password& placeholder=&Password& type=&password&&&/p&
&p&&button type=&submit&&Sign In&/button&&/p&
signin-ok.html
登录成功的模板:
&title&Welcome, {{ username }}&/title&
&p&Welcome, {{ username }}!&/p&
登录失败的模板呢?我们在form.html中加了一点条件判断,把form.html重用为登录失败的模板。
最后,一定要把模板放到正确的templates目录下,templates和app.py在同级目录下:
启动python app.py,看看使用模板的页面效果:
通过MVC,我们在Python代码中处理M:Model和C:Controller,而V:View是通过模板处理的,这样,我们就成功地把Python代码和HTML代码最大限度地分离了。
使用模板的另一大好处是,模板改起来很方便,而且,改完保存后,刷新浏览器就能看到最新的效果,这对于调试HTML、CSS和JavaScript的前端工程师来说实在是太重要了。
在Jinja2模板中,我们用{{ name }}表示一个需要替换的变量。很多时候,还需要循环、条件判断等指令语句,在Jinja2中,用{% ... %}表示指令。
比如循环输出页码:
{% for i in page_list %}
&a href=&/page/{{ i }}&&{{ i }}&/a&
{% endfor %}
如果page_list是一个list:[1, 2, 3, 4, 5],上面的模板将输出5个超链接。
除了Jinja2,常见的模板还有:
:用&% ... %&和${xxx}的一个模板;
:也是用&% ... %&和${xxx}的一个模板;
:Django是一站式框架,内置一个用{% ... %}和{{ xxx }}的模板。
有了MVC,我们就分离了Python代码和HTML代码。HTML代码全部放到模板里,写起来更有效率。
Make a Comment
Sign In to Make a Comment
You can sign in directly without register:
You need authorize to allow connect to your social passport for the first time.
WARNING: You are using an old browser that does not support HTML5.
Please choose a modern browser ( /
/ ) to get a good experience.当前访客身份:游客 [
杨尚川,系统架构设计师,系统分析师,2013年度优秀开源项目APDPlat发起人,资深Nutch搜索引擎专家
:这种“浏览器” + DOM的方式,比直接用httpclien...
:不错,又学到一个新东东,以前只是用jsoup。支持...
:引用来自“ShoringChow”的评论杨老师你好,我在...
:杨老师你好,我在solr的5.2.1中配置了word分词器...
:给力,持续关注中!!
:so useful phrase and words. wonderful job....
:很显然,ansj更胜一筹
今日访问:2
昨日访问:197
本周访问:460
本月访问:3485
所有访问:82698
如何使用HtmlExtractor实现基于模板的网页结构化信息精准抽取?
发表于6个月前( 23:43)&&
阅读(559)&|&评论()
0人收藏此文章,
介绍如何使用HtmlExtractor实现基于模板的网页结构化信息精准抽取
首先,我们新建一个maven工程,在pom.xml中加入HtmlExtractor依赖,如下所示:
&dependency&
&&&&&groupId&org.apdplat&/groupId&
&&&&&artifactId&html-extractor&/artifactId&
&&&&&version&1.1&/version&
&/dependency&
接着,我们加入日志配置文件,在src/main/resources目录下新建日志文件logback.xml,如果想看到更多细节,请将&root level="INFO"&改为&root level="DEBUG"&,内容如下:
&?xml&version="1.0"&encoding="UTF-8"?&
&configuration&
&&&&&appender&name="stdout"&class="ch.qos.logback.core.ConsoleAppender"&
&&&&&&&&&layout&class="ch.qos.logback.classic.PatternLayout"&
&&&&&&&&&&&&&Pattern&%m%n&/Pattern&
&&&&&&&&&/layout&
&&&&&/appender&
&&&&&appender&name="logfile"&class="ch.qos.logback.core.rolling.RollingFileAppender"&
&&&&&&&&&File&logs/logback.log&/File&
&&&&&&&&&rollingPolicy&class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"&&&
&&&&&&&&&&&&&FileNamePattern&logs/logback_%i.log&/FileNamePattern&
&&&&&&&&&&&&&MinIndex&1&/MinIndex&&&
&&&&&&&&&&&&&MaxIndex&10000&/MaxIndex&
&&&&&&&&&/rollingPolicy&&&
&&&&&&&&&triggeringPolicy&class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"&&&
&&&&&&&&&&&&&MaxFileSize&5MB&/MaxFileSize&&
&&&&&&&&&/triggeringPolicy&&
&&&&&&&&&layout&class="ch.qos.logback.classic.PatternLayout"&
&&&&&&&&&&&&&Pattern&%m%n&/Pattern&j
&&&&&&&&&/layout&
&&&&&/appender&
&&&&&root&level="INFO"&
&&&&&&&&&appender-ref&ref="logfile"/&
&&&&&&&&&appender-ref&ref="stdout"/&
&&&&&/root&
&/configuration&
接下来,我们在src/main/java下新建一个类,如NeteasyNewsExtractor.java,内容如下:
import&java.util.ArrayL
import&java.util.L
import&java.util.M
import&org.apdplat.extractor.html.HtmlE
import&org.apdplat.extractor.html.HtmlF
import&org.apdplat.extractor.html.impl.DefaultHtmlE
import&org.apdplat.extractor.html.impl.ExtractR
import&org.apdplat.extractor.html.impl.JSoupHtmlF
import&org.apdplat.extractor.html.model.CssP
import&org.apdplat.extractor.html.model.ExtractFailL
import&org.apdplat.extractor.html.model.ExtractR
import&org.apdplat.extractor.html.model.ExtractResultI
import&org.apdplat.extractor.html.model.HtmlT
import&org.apdplat.extractor.html.model.UrlP
&*&@author&杨尚川
public&class&NeteasyNewsExtractor&{
&&&&public&static&void&main(String[]&args)&{
&&&&&&&&//1、构造抽取规则
&&&&&&&&List&UrlPattern&&urlPatterns&=&new&ArrayList&&();
&&&&&&&&//1.1、构造URL模式
&&&&&&&&UrlPattern&urlPattern&=&new&UrlPattern();
&&&&&&&&urlPattern.setUrlPattern("/\\d{2}/\\d{4}/\\d{2}/[0-9A-Z]{16}.html");
&&&&&&&&//1.2、构造HTML模板
&&&&&&&&HtmlTemplate&htmlTemplate&=&new&HtmlTemplate();
&&&&&&&&htmlTemplate.setTemplateName("网易财经频道");
&&&&&&&&htmlTemplate.setTableName("finance");
&&&&&&&&//1.3、将URL模式和HTML模板建立关联
&&&&&&&&urlPattern.addHtmlTemplate(htmlTemplate);
&&&&&&&&//1.4、构造CSS路径
&&&&&&&&CssPath&cssPath&=&new&CssPath();
&&&&&&&&cssPath.setCssPath("h1");
&&&&&&&&cssPath.setFieldName("title");
&&&&&&&&cssPath.setFieldDescription("标题");
&&&&&&&&//1.5、将CSS路径和模板建立关联
&&&&&&&&htmlTemplate.addCssPath(cssPath);
&&&&&&&&//1.6、构造CSS路径
&&&&&&&&cssPath&=&new&CssPath();
&&&&&&&&cssPath.setCssPath("div#endText");
&&&&&&&&cssPath.setFieldName("content");
&&&&&&&&cssPath.setFieldDescription("正文");
&&&&&&&&//1.7、将CSS路径和模板建立关联
&&&&&&&&htmlTemplate.addCssPath(cssPath);
&&&&&&&&//可象上面那样构造多个URLURL模式
&&&&&&&&urlPatterns.add(urlPattern);
&&&&&&&&//2、获取抽取规则对象
&&&&&&&&ExtractRegular&extractRegular&=&ExtractRegular.getInstance(urlPatterns);
&&&&&&&&//注意:可通过如下3个方法动态地改变抽取规则
&&&&&&&&//extractRegular.addUrlPatterns(urlPatterns);
&&&&&&&&//extractRegular.addUrlPattern(urlPattern);
&&&&&&&&//extractRegular.removeUrlPattern(urlPattern.getUrlPattern());
&&&&&&&&//3、获取HTML抽取工具
&&&&&&&HtmlExtractor&htmlExtractor&=&new&DefaultHtmlExtractor(extractRegular);
&&&&&&&&//4、抽取网页
&&&&&&&&String&url&=&"/08/THR2TMP002533QK.html";
&&&&&&&&HtmlFetcher&htmlFetcher&=&new&JSoupHtmlFetcher();
&&&&&&&&String&html&=&htmlFetcher.fetch(url);
&&&&&&&&List&ExtractResult&&extractResults&=&htmlExtractor.extract(url,&html);
&&&&&&&&//5、输出结果
&&&&&&&&int&i&=&1;
&&&&&&&&for&(ExtractResult&extractResult&:&extractResults)&{
&&&&&&&&&&&&System.out.println((i++)&+&"、网页&"&+&extractResult.getUrl()&+&"&的抽取结果");
&&&&&&&&&&&&if(!extractResult.isSuccess()){
&&&&&&&&&&&&&&&&System.out.println("抽取失败:");
&&&&&&&&&&&&&&&&for(ExtractFailLog&extractFailLog&:&extractResult.getExtractFailLogs()){
&&&&&&&&&&&&&&&&&&&&System.out.println("\turl:"+extractFailLog.getUrl());
&&&&&&&&&&&&&&&&&&&&System.out.println("\turlPattern:"+extractFailLog.getUrlPattern());
&&&&&&&&&&&&&&&&&&&&System.out.println("\ttemplateName:"+extractFailLog.getTemplateName());
&&&&&&&&&&&&&&&&&&&&System.out.println("\tfieldName:"+extractFailLog.getFieldName());
&&&&&&&&&&&&&&&&&&&&System.out.println("\tfieldDescription:"+extractFailLog.getFieldDescription());
&&&&&&&&&&&&&&&&&&&&System.out.println("\tcssPath:"+extractFailLog.getCssPath());
&&&&&&&&&&&&&&&&&&&&if(extractFailLog.getExtractExpression()!=null)&{
&&&&&&&&&&&&&&&&&&&&&&&&System.out.println("\textractExpression:"&+&extractFailLog.getExtractExpression());
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&&&&&Map&String,&List&ExtractResultItem&&&extractResultItems&=&extractResult.getExtractResultItems();
&&&&&&&&&&&&for(String&field&:&extractResultItems.keySet()){
&&&&&&&&&&&&&&&&List&ExtractResultItem&&values&=&extractResultItems.get(field);
&&&&&&&&&&&&&&&&if(values.size()&&&1){
&&&&&&&&&&&&&&&&&&&&int&j=1;
&&&&&&&&&&&&&&&&&&&&System.out.println("\t多值字段:"+field);
&&&&&&&&&&&&&&&&&&&&for(ExtractResultItem&item&:&values){
&&&&&&&&&&&&&&&&&&&&&&&&System.out.println("\t\t"+(j++)+"、"+field+"&=&"+item.getValue());&&&
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&System.out.println("\t"+field+"&=&"+values.get(0).getValue());&&&&&
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&System.out.println("\tdescription&=&"+extractResult.getDescription());
&&&&&&&&&&&&System.out.println("\tkeywords&=&"+extractResult.getKeywords());
最后,我们运行NeteasyNewsExtractor类,控制台输出如下:
开始初始化URL抽取规则
完成初始化URL抽取规则
1、网页&/08/THR2TMP002533QK.html&的抽取结果
title&=&宗庆后:企业平稳过冬依赖政府内需政策思路转变
content&=&娃哈哈董事长&宗庆后&宗庆后:&各位专家和企业朋友,今天没有我演讲的任务,也没有准备,我谈几个感想,经济危机看你怎么看,美国的金融危机收钱就行,用了人家的钱就了,窟窿大的把钱收回来就行了,布什当了两届总统又把美国的钱用完了,现在又要收钱,人民币升值。&说到受到美国金融危机的影响,两三个月的工夫就造成了这么大困难,原因在真正地方,我认为中国就没有分配,经济学家都知道,原始社会的时候就是相互交换,现在分配的方式多式多样的。&改革开放这么多年,有的专家说我们没有政治体制改革,我们应该是政治体制改革和经济体制改革一起进行。这么多年,经济发展就非常快,但没有搞好分配,分配了以后才可以再生产。每次劳动以后就有一个剩余的价值,就没有分配给老百姓用。不能技术再生产怎么解决?就是再出口。我国60%靠出口,前面三十年是靠出口和投资发展。现在订单少了,出口受阻了。&另外我感觉制造业利润太高,税负太重了。所以有些企业家看看自己太辛苦,股市和房地产可以引起暴利,所以没有在制造业坚持发展,没有提高自己企业的核心竞争力。所以股市、房市掉下来,可能2-3个月一下就乱了。&企业的经济危机当中要承担什么责任?我感觉对于经济危机,企业没有办法扭转,关键是国家政策调整,国家政策调整中国经济要不了半年就上来了。拉动内需认识比较统一的,关键是如何拉动内需。&拉动内需关键是老百姓要有钱花,降低企业税收,要企业给员工加工资。你要提高农产品价格,放开农产品价格,等到老百姓有钱才可以花钱。&给了老百姓钱不一定要花,所以我才感觉到蒙代尔说的消费券办法可能效果有限。很多国家都在发消费券,但中国社会本质上还是在限制消费。要解决读书医疗方面的问题,让老百姓没有后顾之忧大量花钱,才可以把内需拉起来,这样工厂才可以活起来。&现在放缩银根根本就没有用了,银行贷给你就要打水飘。所以必须把内需拉起来,让工厂赚钱,这样才可以把经济危机扭转过来。我认为国家要有这个政策,整个发展国家要改变,作为企业来讲,经济比较好的国家都会非常关注企业生存。如果根本就不把企业当回事情,出的政策全部都是把负担转嫁给企业身上,企业一塌,劳动力失业,社会问题就来了,所以企业是社会创造财富最主要的力量,发展经济当中最重要的力量。企业发展员工好了,企业垮台大家就失业了,这就麻烦了。&中国政府现在还是关心企业,开始解决企业的难题,我认为这就是一个机遇。现在出口企业大部分是贴牌加工的,并不是说美国不消费,欧洲不消费,而是叫你委托加工的企业倒了。这就带来了自己品牌开拓国际市场的机会。&国外经济危机就要买中国的产品,这对出口企业也是一个机会。&现在国家出台扶持政策,出口退税,给了有多的优惠政策,对我们来讲也是一个机会。&所以我认为中国的问题很好解决,关键是政策要调整。调整得好,这次经济危机当中就会一点损失都没有,一点影响都没有。如果做到无论销售和利润都增长在4%左右,现金也比较好了,就会一切都好。&我们这些企业老老实实做饮料,没有做任何其他东西,坚持主业发展,把主业做强做大,不做自己没有能力做的事情。&所以今后的企业家心态要稳,并不是一件事情做成功了,什么事情就可以做成功的。有的时候看看别人赚钱,这个钱不是我赚的,所以就不要盲目搞。现在说抄底,抄人家底,就千万不要抄底。&我不太赞同项兵教授的说法,你没有科技创新的话,美国有先进的武器,到处可以打你,到处可以制约你。美国的武器比你先进,美国人就敢说话。所以要科技创新,我们有廉价劳动力创造财富,企业要不断的科技创新,提高竞争力,我们中国才有民族竞争力,这是我们崛起的时候,也是一个机会,我们不要救人家,而是救自己。&谢谢大家!&(本文来源:网易财经&)&【本新闻已有0人评论,点击查看。】
description&=&对于经济危机,企业没有办法扭转,关键是国家政策调整,国家政策调整中国经济要不了半年就上来了。拉动内需认识比较统一的,关键是如何拉动内需。拉动内需关键是老百姓要有钱花,降低企业税收,要企业给员工加工资。
keywords&=&宗庆后,股票,股市,行情,基金,期货,汇率,证券,证券市场,上市公司,研究报告
好了,我们第一个简单的入门小例子就到这里。
是一个Java实现的基于模板的网页结构化信息精准抽取组件,本身并不包含爬虫功能,但可被爬虫或其他程序调用以便更精准地对网页结构化信息进行抽取。
是为大规模分布式环境设计的,采用主从架构,主节点负责维护抽取规则,从节点向主节点请求抽取规则,当抽取规则发生变化,主节点主动通知从节点,从而能实现抽取规则变化之后的实时动态生效。
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读当前位置: >
> &Minimal 1.0 响应式布局正文
Minimal 1.0 响应式布局的网站后台管理系统html模板
Minimal 1.0是一个网站后台管理系统的html模板,页面布局采用了响应式布局,随着浏览器宽度的改变,页面呈现不同的变化,例如,当浏览器足够宽时,侧边栏全展开,而当浏览器太窄了,侧边栏会变成小图标,鼠标移动到图标上,显示下拉选项。本模板采用了很多新技术,例如动态的缓刑比例图,动态的线形图等等,利用ajax就可以直观看出本站的相关信息,非常方便使用。每个版块都可以展开、收起、关闭等等。另外,本套html模板布局完美,色调柔和。
由于模板比较大,服务器资源有限,就不再弄在线预览了,您可以下载下来,在本地打开index.html即可。
注:本模板调用了国外网站的字体js文件,导致加载非常慢,如果您觉得不需要,可以在页头找到与font有关的js引用,删除即可。您的位置:
网页模板字体颜色设置更改,html设置字体颜色代码方法有哪些
发布者: moke |
在HTML中我们使用font标签即可对字体内容设置颜色。1、font语法:&color="#FF0000"我是红色字体&首先font是一对常规标签,将字体文本内容放入标签内,font标签内设置color颜色+对应颜色值即可设置font标签对象内字体颜色。2、html font设置字体颜色实例2-1、html字体颜色实例完整代码:&!DOCTYPE&html&&&&charset="utf-8"&&font字体颜色在线实例&DIVCSS5&&&&color="#FF0000"我是红色字体&&width="300"&border="1"&&&color="#0000FF"你好&DIVCSS5&&&&&以上实例分别单独对字体设置颜色和对表格内字体设置颜色2-2、字体颜色实例截图html字体颜色设置案例截图2-3、在线演示:查看案例要改变字体颜色,只需要将颜色值更改即可。二、html div css字体颜色设置 & - &&TOP在html中通过css样式设置字体颜色。使用css设置html字体颜色方法有两种,一种是标签内CSS、一种是外部CSS。1、基本知识介绍使用外部CSS,可以将CSS代码单独放到CSS文件里使用html link引入CSS(html引人css),也可以在html使用&style&标签,建立CSS。也可以在html标签内使用style属性设置css颜色。2、DIV+CSS实例演示这里实践两种方法来实现HTML字体颜色设置,一种标签内使用css,另外一种使用style标签实现字体颜色设置。3、实例完整HTML 源代码&!DOCTYPE&html&&&&charset="utf-8"&&css实现字体颜色&在线演示&DIVCSS5&&.divcss5{color:#F00}&&说明:使用style标签设置字体颜色&--&&&&&class="divcss5"我字体是红色&&style="color:#00F"我字体是蓝色&&&&分别使用&style&标签和DIV标签内使用style属性设置html中字体颜色。4、div css案例截图CSS设置字体颜色案例实例效果截图
本文地址:
文章标题:
最新分享资源
by 慕容清思
by 慕容清思
0102030405060708}

我要回帖

更多关于 discuz 插件模板调用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信