tornada-模板

tornado模板

1.配置模板路徑 (project/config.py)

# coding=utf-8
import os
BASE_DIRS = os.path.dirname(__file__)
# 參數
options = {
       「post」 : 8000,  
}
# 配置
settings = {
       "static_path" : os.path.join(BASE_DIRS,"static"),
       "template_path":os.path.join(BASE_DIRS,"templates"),
        "debug":True,
}               

 

2.配置URL路由(project/application.py)

# coding = utf-8
import tornado.web
from views import views
import config

class Application(tornado.web.Application):
       def __init__(self):             
             app = [
                    (r"/home",views.HomeHandler),
              ]      
       super(Application, self).__init__(app, **config.settings)

 

3.渲染並返回給客戶端(project/views/views.py)

# coding = utf-8
# 視圖

from tornado.web import RequestHandler

class HomeHandler(RequestHandler):
        def get(self, *args, **kwargs):
temp = 100
per = {"name" : "hello", "age":18} self.render(
"home.html", num = temp, per = per)
# 方法2
self.render("home.html", num = temp, **per)

 

4.變量與表達式(project/templates/home.html)

  • 語法
    • {{ var }}
    • {{ expression }}
<html lang="en">
<head>
      <meta charset="UTF-8">
       <title>主頁</title>
</head>
<body>
      <h1>這裏是home頁面</h1>
      <h1>num: {{ num }}</h1>
<h1>per["name"]</h1>
<h1>{{name}}</h1> </body> </html>

 

 

5.流程控制

  • if
    • {% if 表達式 %} ......{% elif  表達式 %} ......{% else %}..... {%end%}
  • for
    • {% for item in items %}  ......  {%end%}
  • while

 

6.函數

  •  static_url
    • <link rel="stylesheet" href="{{ static_url('css/home.css') }}">
    • 優勢1: 修改目錄不須要修改URL
    • 優勢2:建立了一個基於文件內容的hash值,並將其添加到URL末尾(當一個查詢參數),這個hash值總能保證加載的是最新的文件,而不是之前的緩存版本。不管是開發階段仍是上線階段都是頗有必要的。
  • 自定義函數
    • # 把函數當參數傳遞
      class
      FuncHandler(RequestHandler): def get(self, *args, **kwargs): def mySum(n1,n2): return n1+n2 self.render(‘home.html’,mysum = mySum)

      # 在 home.html 中使用
      <h1>{{ mysum(100,99) }}</h1>

       

7.轉義

  • 做用
    • tornado默認開啓了自動轉義功能,能防止網址受到惡意攻擊

咱們能夠經過raw語句來輸出不被轉義的原始格式,如:css

{% raw text %}

 

注意: 只能關閉一行;在Firefox瀏覽器中會直接彈出alert窗口,而在Chrome瀏覽器中,須要set_header("X-XSS-Protection", 0)html

 

 

若要關閉自動轉義web

一種方法是在Application構造函數中傳遞autoescape=Noneexpress

另外一種方法是在每頁模板中修改自動轉義行爲,添加以下語句:瀏覽器

{% autoescape None %}

 

escape()緩存

關閉自動轉義後,能夠使用escape()函數來對特定變量進行轉義,如:app

{{ escape(text) }}

 

 8.塊

咱們能夠使用塊來複用模板,塊語法以下:函數

{% block block_name %} {% end %}

而子模板index.html使用extends來使用父模板base.html,以下:tornado

{% extends "base.html" %}

 

9.靜態文件

  • static_path
    • "static_path":os.path.join(BASE_DIRS, "static")
  • StaticFileHandler  (靜態文件)
    • 注意:放在全部的路由下面(在application.py中)
    • (r"/(.*)$", tornado.web.StaticFileHandler,{「path」:os.path.join(config.BASE_DIRS,"static/html"),
      "default_filename":"index.html"})
相關文章
相關標籤/搜索