YATE界面生成模板引擎 《Head First Python》第七章
2017-01-12 15:18
295 查看
1 模板引擎的作用
说它是引擎的原因是web应用程序可以调用模板中的函数,生成HTML代码,从而为生成用户界面。因此,它是整个界面生成的中枢,控制着生成界面的形式。2 代码实现
先给出yate.py总体代码:from string import Template def start_response(resp="text/html"): return('Content-type: ' + resp + '\n\n') def include_header(the_title): with open('templates/header.html') as headf: head_text = headf.read() header = Template(head_text) return(header.substitute(title=the_title)) def include_footer(the_links): with open('templates/footer.html') as footf: foot_text = footf.read() link_string = '' for key in the_links: link_string += '<a href="' + the_links[key] + '">' + key + '</a> ' footer = Template(foot_text) return(footer.substitute(links=link_string)) def start_form(the_url, form_type="POST"): return('<form action="' + the_url + '" method="' + form_type + '">') def end_form(submit_msg="Submit"): return('<p></p><input type=submit value="' + submit_msg + '"></form>') def radio_button(rb_name, rb_value): return('<input type="radio" name="' + rb_name + '" value="' + rb_value + '"> ' + rb_value + '<br />') def u_list(items): u_string = '<ul>' for item in items: u_string += '<li>' + item + '</li>' u_string += '</ul>' return(u_string) def header(header_text, header_level=2): return('<h' + str(header_level) + '>' + header_text + '</h' + str(header_level) + '>') def para(para_text): return('<p>' + para_text + '</p>')
2.1 开始响应start_response
def start_response(resp="text/html"): return('Content-type: ' + resp + '\n\n')
将resp写入字符串中,默认
resp="text/html"。
2.2 页面头部
def include_header(the_title): with open('templates/header.html') as headf: head_text = headf.read() header = Template(head_text) return(header.substitute(title=the_title))
头部显示,用你想显示的字符
the_title替换
templates/header.html文件中的
title。实现方式是通关过调用
Template类的
substitute方法。这里有两点值得借鉴:
1.文件的读取整体读取方法
with open('templates/header.html') as >headf: head_text = headf.read()
2.文本中关键字的替换
Template类的
substitute方法
2.3 页面底部链接include_footer
def include_footer(the_links): with open('templates/footer.html') as footf: foot_text = footf.read() link_string = '' for key in the_links: link_string += '<a href="' + the_links[key] + '">' + key + '</a> ' #将传入的"the_links"字典进行解读,字典中的’键‘,作为显示的文本;字典的’值‘作为链接的目标,从而形成一个超链接。 footer = Template(foot_text) return(footer.substitute(links=link_string)) #最后,用字典中的超链接条目组成的字符串替换'templates/footer.html'中的'links'字符。
注意,给函数
include_footer传入的是字典,如以下调用的形式。
print(yate.include_footer({"Home":"/index.html"}))
2.4 初始表单的函数start_form
def start_form(the_url, form_type="POST"): return('<form action="' + the_url + '" method="' + form_type + '">')
调用函数只需提供提交的地址url和形式type,太方便了,哈哈哈!!
2.5 提交表单的函数end_form
def end_form(submit_msg="Submit"): return('<p></p><input type=submit value="' + submit_msg + '"></form>')
2.6 生成按钮函数radio_button
def radio_button(rb_name, rb_value): return('<input type="radio" name="' + rb_name + '" value="' + rb_value + '"> ' + rb_value + '<br />')
只需提供按钮的名称name和对应的值value.
2.7 生成列表函数u_list
def u_list(items): u_string = '<ul>' for item in items: u_string += '<li>' + item + '</li>' u_string += '</ul>' return(u_string)
调用者只需提供列表类型的值给函数即可items。如调用者:
print(yate.u_list(athletes[athlete_name].top3))
将会列出运动员最好的三个成绩。
2.8 生成标题和段落格式函数
def header(header_text, header_level=2): return('<h' + str(header_level) + '>' + header_text + '</h' + str(header_level) + '>') def para(para_text): return('<p>' + para_text + '</p>')
比较简单,不再赘述。
3 效果检验
实现对以上函数的调用和执行,需要相关web服务器的支撑,在本章中用Python搭建了CGIHTTP服务器,自然能够调用执行这些函数,按照规范CGI程序必须放在与服务器同一目录下的cgi-bin文件夹,web应用文件夹组织如下所示:按第七章的内容,我们查看cgi-bin文件夹下的generate_list.py文件,注意以下代码:
print yate.start_response() print(yate.include_header("Coach Kelly's List of Athletes")) print(yate.start_form("generate_timing_data.py")) print(yate.para("Select an athlete from the list to work with:")) for each_athlete in athletes: print(yate.radio_button("which_athlete",athletes[each_athlete].name)) print(yate.end_form("Select")) print(yate.include_footer({"Home":"/index.html"}))
这是一个生成显示页面的HTML语言的顺序。按照这种方式,我们可以得到想要的页面如下所示:
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- myTemplate模板引擎
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- 在Windows 8.1的IE 11中屏蔽双击放大功能
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定