Tornado模板学习
tornado是一个python编写的一个强大的、可扩展的web服务器。
Tornado包括了一个有用的模块(tornado.options)来从命令行中读取设置
Tornado的RequestHandler类有一系列有用的内建方法,包括get_argument,我们在这里从一个查询字符串中取得参数greeting的值。(如果这个参数没有出现在查询字符串中,Tornado将使用get_argument的第二个参数作为默认值。)
RequestHandler的另一个有用的方法是write,它以一个字符串作为函数的参数,并将其写入到HTTP响应中
一旦Application对象被创建,我们可以将其传递给Tornado的HTTPServer对象,然后使用我们在命令行指定的端口进行监听(通过options对象取出。)最后,在程序准备好接收HTTP请求后,我们创建一个Tornado的IOLoop的实例。
基本了解
1、在Application的参数中添加template_path配置,指定模板的路径和静态文件的路径
template_path='template';
static_path='static';
2、把html文件放入template文件夹下,把静态文件放入static文件夹下
3、使用render方法渲染模板
class IndexHandler(tornado.Web.RequestHandler);
def get(self);
self.render('tmp_index.html');
这段代码告诉Tornado在templates文件夹下找到一个名为tmeplate_index.html 的文件,读取其中的内容,并且发送给浏览器
模板中的符号
{{}}表达式用双括号包围,内容是可以是如何python表达式,在双大括号中的单词是占位符
{% %}模板控制语句以{% %}包围
### 1、双大括号中放置变量名或表达式,变量名与传入的关键字参数名要相同
```python
#传入一个表达式
{{ 1+2 }}
<br>
{{ time.time() }} # 可以执行函数
<br>
{{ haha() }} # 自定义的函数也可以传入
```
2、控制语句
控制语句的返回以最近的{% end %}结束
if条件判断
{% if condition %}
{% else condition %}
{% else %}
{% end %}
for循环
{% for var in expr %}
...
{% end %}
模板转义
atag = "<a href='https://www.baidu.com/' target='_blank'>'---百度---' </a><br> "
self.render('03escape.html',
username=username,
time=time,
urllist=urllist,
atag=atag
)
当然这个默认自动是转义的,如果不要转义也是可以的,有如下方法:
1.全局转义,在Application中添加配置项
autoescape=None,
2.在文档最开始添加
{% autoescape None %} #实现整个文档转义
{{ atag }}
{{ escape(atag) }}
3.也可以使用 {% raw xxx %} 来输出不转义内容
{% raw atag %}
模板继承
把多个页面相同的内容提取出来放在一个base.html文件中,各个子html文件不同的内容使用块语句占位
子html重写这个块中的内容。
模板中使用函数
escape(s) 替换字符串中的&、<、>为他们对应的html字符。
url_escape(s) 使用urllib.quote_plus替换字符串中的字符为URL编码格式。
json_encode(val) 将val转换json格式
squeeze(s) 过滤字符串s,把连续的多个空白字符替换为一个空格
static_url的函数来生成static目录下文件的URL
模板扩展
语法:{% extends "filename.html" %}
块,block语句
语法:{% block header %}{% end %}
注:一个语法错误或者没有闭合的{% block %}语句可以使得浏览器直接显示500: Internal Server Error(如果你运行在debug模式下会引发完整的Python堆栈跟踪)