首頁技術文章正文

Tornado模板

更新時間:2018-10-12 來源:黑馬程序員 瀏覽量:

--------------------靜態(tài)文件--------------------
1、static_path:通過向web.Application類的構造函數(shù)傳遞一個名為static_path的參數(shù)來告訴Tornado從文件系統(tǒng)的一個特定位置提供靜態(tài)文件
    app = tornado.web.Application(
        [(r'/', IndexHandler)],
        static_path=os.path.join(os.path.dirname(__file__), "statics"),
    )

2、對于靜態(tài)文件目錄的命名,為了便于部署,建議使用static
    可以通過http://127.0.0.1/static/html/index.html來訪問。而且在index.html中引用的靜態(tài)資源文件,我們給定的路徑也符合/static/...的格式,故頁面可以正常瀏覽。

3、StaticFileHandler:可以通過tornado.web.StaticFileHandler來自由映射靜態(tài)文件與其訪問路徑url。
    1、tornado.web.StaticFileHandler是tornado預置的用來提供靜態(tài)資源文件的handler。

    2、
    import os

    current_path = os.path.dirname(__file__)
    app = tornado.web.Application(
        [
            (r'^/()$', StaticFileHandler, {"path":os.path.join(current_path, "statics/html"), "default_filename":"index.html"}),
            (r'^/view/(.*)$', StaticFileHandler, {"path":os.path.join(current_path, "statics/html")}),
        ],
        static_path=os.path.join(current_path, "statics"),
    )

    3、path 用來指明提供靜態(tài)文件的根路徑,并在此目錄中尋找在路由中用正則表達式提取的文件名。

    4、default_filename 用來指定訪問路由中未指明文件名時,默認提供的文件。


--------------------使用模板--------------------
1、路徑與渲染
    1、使用模板,需要仿照靜態(tài)文件路徑設置一樣,向web.Application類的構造函數(shù)傳遞一個名為template_path的參數(shù)來告訴Tornado從文件系統(tǒng)的一個特定位置提供模板文件

    2、
    app = tornado.web.Application(
        [(r'/', IndexHandler)],
        static_path=os.path.join(os.path.dirname(__file__), "statics"),
        template_path=os.path.join(os.path.dirname(__file__), "templates"),
    )

    3、在handler中使用render()方法來渲染模板并返回給客戶端。
        self.render("index.html") # 渲染主頁模板,并返回給客戶端。

2、模板語法
    1、變量與表達式
        1、在tornado的模板中使用{{}}作為變量或表達式的占位符,使用render渲染后占位符{{}}會被替換為相應的結果值。
            self.render("index.html",**kwargs)

        2、{{}}不僅可以包含變量,還可以是表達式
            self.render("index.html",{"p1":100,"p2":200})

            {{p1 + p2}}

    2、控制語句
        1、在Tornado模板中使用Python條件和循環(huán)語句??刂普Z句以{\%和\%}包圍,并以類似下面的形式被使用:
            {% if page is None %} 或 {% if len(entries) == 3 %}

        2、部分控制語句
            1、{% if ... %} ... {% elif ... %} ... {% else ... %} ... {% end %}

            2、{% for ... in ... %} ... {% end %}

            3、{% while ... %} ... {% end %}

    3、函數(shù)
        1、static_url():Tornado模板模塊提供了一個叫作static_url的函數(shù)來生成靜態(tài)文件目錄下文件的URL。
            1、使用方法
            <link rel="stylesheet" href="{{ static_url("style.css") }}">

            2、static_url函數(shù)創(chuàng)建了一個基于文件內容的hash值,并將其添加到URL末尾(查詢字符串的參數(shù)v)。這個hash值確保瀏覽器總是加載一個文件的最新版而不是之前的緩存版本。無論是在你應用的開發(fā)階段,還是在部署到生產(chǎn)環(huán)境使用時,都非常有用,因為你的用戶不必再為了看到你的靜態(tài)內容而清除瀏覽器緩存了。

            3、另一個好處是你可以改變你應用URL的結構,而不需要改變模板中的代碼。例如,可以通過設置static_url_prefix來更改Tornado的默認靜態(tài)路徑前綴/static。如果使用static_url而不是硬編碼的話,代碼不需要改變。

        2、轉義
            1、模板中可以通過raw語句來輸出不被轉義的原始格式

            2、注意:在Firefox瀏覽器中會直接彈出alert窗口,而在Chrome瀏覽器中,需要set_header("X-XSS-Protection", 0)

            3、關閉自動轉義:
                1、Application中設置autoescape=None

                2、模板中添加 {% autoescape None %} 語句

            4、關閉自動轉義后,可以使用escape()函數(shù)來對特定變量進行轉義:{{ escape(text) }}

        3、自定義函數(shù):在模板中還可以使用一個自己編寫的函數(shù),只需要將函數(shù)名作為模板的參數(shù)傳遞即可,就像其他變量一樣。
            1、定義函數(shù)
            def house_title_join(titles):
                return "+".join(titles)

            2、將函數(shù)賦值到指定變量傳遞到模板
            self.render("index.html", houses=house_list, title_join = house_title_join)

            3、前端調用指定的函數(shù),并傳入對應的參數(shù)
            {{title_join(house["titles"])}}

    4、塊
        1、進行模板頁的嵌套
            1、指定繼承的模板頁
                {% extends "base.html" %}
            2、定義對應的模塊,子模板繼承父級模板進行對應的替換操作
                {% block block_name %} {% end %}



作者:黑馬程序員人工智能+python培訓學院
首發(fā):http://python.itheima.com/



分享到:
在線咨詢 我要報名
和我們在線交談!