丁香五月婷婷黄色视频_97在线看观看免费_男女xo嘿咻嘿咻动态图_最近更新在线中文字幕人妻

?

模板匹配翻譯 模板和UI?

日期:2023-03-11 12:39:36 / 人氣: 434 / 發(fā)布者:成都翻譯公司

模板和UI配置模板如果你不同的處理函數(shù)有不同的模板路徑).模板語(yǔ)法Tornado模板被直接轉(zhuǎn)換為Python.包含在你模板中的表達(dá)式會(huì)逐字的復(fù)制到一個(gè)代表你模板的Python函數(shù)中.翻譯函數(shù)有兩種形式:是可以根據(jù)第三個(gè)參數(shù)的值來(lái)翻譯字符串單復(fù)數(shù)的.一個(gè)模板文件本身可以作為一個(gè)模塊.

模板和用戶界面

Tornado 包含一種簡(jiǎn)單、快速且靈活的模板語(yǔ)言。本節(jié)介紹語(yǔ)言和相關(guān)問(wèn)題,例如國(guó)際化。

Tornado 也可以使用其他 Python 模板語(yǔ)言,盡管沒(méi)有計(jì)劃將這些系統(tǒng)集成到其中。相反,它只是將模板轉(zhuǎn)換為字符串并將其傳遞給

配置模板

默認(rèn)情況下,Tornado 將在與當(dāng)前 .py 文件相同的目錄中查找關(guān)聯(lián)的模板文件。如果要將模板文件放在不同的目錄中,可以使用 template_path (如果不同的處理函數(shù)具有不同的模板路徑,則可以覆蓋)。

為了從非文件系統(tǒng)位置加載模板,請(qǐng)實(shí)例化子類并在應(yīng)用程序設(shè)置中為其配置 template_loader。

默認(rèn)情況下,編譯后的模板會(huì)被緩存;為了關(guān)閉此緩存并使更改(對(duì)目標(biāo))在重新加載后始終可見(jiàn),請(qǐng)?jiān)趹?yīng)用程序設(shè)置中使用compiled_template_cache=False 或debug=True。

模板語(yǔ)法

Tornado 模板只是將 Python 控制序列和表達(dá)式嵌入 HTML(或任何其他文本格式)文件中,并帶有一些標(biāo)記:

<html>
   <head>
      <title>{{ title }}title>
   head>
   <body>
     <ul>
       {% for item in items %}
         <li>{{ escape(item) }}li>
       {% end %}
     ul>
   body>
 html>

如果將此目標(biāo)另存為“template.html”并將其放在與 Python 文件相同的目錄中,則可以使用以下代碼呈現(xiàn)它:

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        items = ["Item 1", "Item 2", "Item 3"]
        self.render("template.html", title="My title", items=items)

Tornado 模板支持控制語(yǔ)句和表達(dá)式??刂普Z(yǔ)句包含在 {% 和 %} 中,例如 {% if len(items)> 2 %}。表達(dá)式被包裹在 {{ 和 }} 之間,例如,{{ items[0] }}。

控制語(yǔ)句或多或少類似于 Python 語(yǔ)句。我們支持 if、for、while 和 try,它們必須使用 {% end %} 來(lái)標(biāo)記結(jié)束。我們也支持使用extends和block標(biāo)簽的模板繼承Statement,這些內(nèi)容的細(xì)節(jié)可以看。

表達(dá)式可以是任何 Python 表達(dá)式,包括函數(shù)調(diào)用。模板代碼將在包含以下對(duì)象和函數(shù)的命名空間中執(zhí)行(注意,此列表適用于模板的使用和渲染。如果直接在外部使用該模塊,則下面的許多不存在)。

當(dāng)您構(gòu)建一個(gè)真正的應(yīng)用程序時(shí),您可能希望使用 Tornado 模板的所有功能,尤其是目標(biāo)繼承。在 部分閱讀所有關(guān)于這些特性的信息(一些特性,包括 UIModules 是在模塊中實(shí)現(xiàn)的)

在引擎下,Tornado 模板直接轉(zhuǎn)換為 Python。模板中包含的表達(dá)式將被逐字復(fù)制到表示模板的 Python 函數(shù)中。我們不會(huì)試圖阻止模板語(yǔ)言中的任何內(nèi)容;我們很清楚創(chuàng)建一個(gè)高度靈活的模板系統(tǒng),而??不是一個(gè)嚴(yán)格限制的模板系統(tǒng)。因此,如果隨意在模板表達(dá)式中填充(代碼),執(zhí)行時(shí)也會(huì)出現(xiàn)各種隨機(jī)錯(cuò)誤。

默認(rèn)情況下,所有模板輸出都將使用函數(shù)轉(zhuǎn)義??梢酝ㄟ^(guò)將 autoescape=None 傳遞給或構(gòu)造函數(shù)來(lái)全局更改此行為。對(duì)于模板文件,您可以使用 {% autoescape None %} 指令,對(duì)于單個(gè)表達(dá)式,您可以使用 {% raw ...%} 而不是 {{ ... }}。此外,每個(gè)地方都可以使用可選的轉(zhuǎn)義函數(shù)名稱代替 None 。

請(qǐng)注意,雖然 Tornado 的自動(dòng)轉(zhuǎn)義有助于防止 XSS 漏洞,但它并不適用于所有情況。出現(xiàn)在特定位置的表達(dá)式,例如 Javascript 或 CSS,可能需要額外的轉(zhuǎn)義。此外,您必須小心始終在可能包含不受信任內(nèi)容的 HTML 中使用雙引號(hào),或者您必須在屬性中使用單獨(dú)的轉(zhuǎn)義函數(shù)(參見(jiàn)例如)

全球化

當(dāng)前用戶的語(yǔ)言環(huán)境(無(wú)論他們是否登錄)始終可以通過(guò)在請(qǐng)求處理程序中使用 self.locale 或在模板中使用語(yǔ)言環(huán)境來(lái)訪問(wèn)。語(yǔ)言環(huán)境的名稱(例如,en_US)可以通過(guò)locale.name 獲得,也可以通過(guò)方法翻譯字符串。該模板還有一個(gè)名為 _() 的全局函數(shù),用于字符串翻譯。翻譯函數(shù)有兩種形式:

_("Translate this string")

它是根據(jù)當(dāng)前的區(qū)域設(shè)置直接翻譯的,并且:

_("A person liked this", "%(num)d people liked this",
  len(people)) % {"num": len(people)}

可以根據(jù)第三個(gè)參數(shù)的值翻譯字符串單數(shù)和復(fù)數(shù)。在上面的例子中,如果 len(people) 為 1,則返回第一句的翻譯,否則返回第二句的翻譯。

*常見(jiàn)的翻譯模式四使用 Python 來(lái)命名占位符變量(上例中的 %(num)d),因?yàn)檎嘉环诜g過(guò)程中可能會(huì)發(fā)生變化。

這是一個(gè)正確的國(guó)際化模板:

<html>
   <head>
      <title>FriendFeed - {{ _("Sign in") }}title>
   head>
   <body>
     <form action="{{ request.path }}" method="post">
       <div>{{ _("Username") }} <input type="text" name="username"/>div>
       <div>{{ _("Password") }} <input type="password" name="password"/>div>
       <div><input type="submit" value="{{ _("Sign in") }}"/>div>
       {% module xsrf_form_html() %}
     form>
   body>
 html>

默認(rèn)情況下,我們使用用戶瀏覽器發(fā)送的 Accept-Language 標(biāo)頭來(lái)發(fā)現(xiàn)用戶的語(yǔ)言環(huán)境。如果我們沒(méi)有找到合適的 Accept-Language 值,我們將使用 en_US。如果您讓用戶設(shè)置他們的首選語(yǔ)言環(huán)境,您可以通過(guò)覆蓋來(lái)覆蓋默認(rèn)選定區(qū)域:

class BaseHandler(tornado.web.RequestHandler):
    def get_current_user(self):
        user_id = self.get_secure_cookie("user")
        if not user_id: return None
        return self.backend.get_user_by_id(user_id)
    def get_user_locale(self):
        if "locale" not in self.current_user.prefs:
            # Use the Accept-Language header
            return None
        return self.current_user.prefs["locale"]

如果 get_user_locale 返回 None,那么我們(繼續(xù))依靠 Accept-Language 標(biāo)頭(做出判斷)。

該模塊支持兩種形式的加載翻譯:一種是帶有相關(guān)工具的.mo格式,另一種是簡(jiǎn)單的.csv格式。應(yīng)用程序通常在啟動(dòng)時(shí)調(diào)用一次或其中之一;檢查這些方法以獲取有關(guān)支持格式的更多詳細(xì)信息..

您可以使用您的應(yīng)用程序支持的區(qū)域(設(shè)置)列表。通過(guò)從支持的區(qū)域中選擇*接近的匹配來(lái)獲得用戶的區(qū)域。例如,如果用戶所在的區(qū)域是 es_GT,并且支持 es 區(qū)域模板匹配翻譯,則請(qǐng)求中的 self.locale 將設(shè)置為 es。如果未找到*接近的匹配項(xiàng),我們將使用 en_US。

用戶界面模塊

Tornado 支持 UI 模塊模板匹配翻譯,以便在您的應(yīng)用程序中輕松支持標(biāo)準(zhǔn)和重用 UI 組件。UI 模塊就像在頁(yè)面上渲染組件的特殊函數(shù)調(diào)用,它們可以包裝自己的 CSS 和 JavaScript。

例如,如果您實(shí)現(xiàn)了一個(gè)博客,并且您希望一個(gè)博客條目出現(xiàn)在主頁(yè)和每個(gè)博客頁(yè)面上,您可以實(shí)現(xiàn)一個(gè) Entry 模塊來(lái)在這些頁(yè)面上呈現(xiàn)它們。首先,為您的 UI 模塊創(chuàng)建一個(gè) Python 模塊,例如 uimodules.py:

class Entry(tornado.web.UIModule):
    def render(self, entry, show_comments=False):
        return self.render_string(
            "module-entry.html", entry=entry, show_comments=show_comments)

在您的應(yīng)用程序設(shè)置中,使用 ui_modules 配置告訴 Tornado 使用 uimodules.py

from . import uimodules
class HomeHandler(tornado.web.RequestHandler):
    def get(self):
        entries = self.db.query("SELECT * FROM entries ORDER BY date DESC")
        self.render("home.html", entries=entries)
class EntryHandler(tornado.web.RequestHandler):
    def get(self, entry_id):
        entry = self.db.get("SELECT * FROM entries WHERE id = %s", entry_id)
        if not entry: raise tornado.web.HTTPError(404)
        self.render("entry.html", entry=entry)
settings = {
    "ui_modules": uimodules,
}
application = tornado.web.Application([
    (r"/", HomeHandler),
    (r"/entry/([0-9]+)", EntryHandler),
], **settings)

在模板中,您可以使用 {% module %} 語(yǔ)法調(diào)用模塊。例如,您可以從 home.html 調(diào)用 Entry 模塊:

{% for entry in entries %}
  {% module Entry(entry) %}
{% end %}

和 entry.html:

{% module Entry(entry, show_comments=True) %}

模塊可以包含自定義 CSS 和 JavaScript 函數(shù),方法是覆蓋 embedding_css、embedded_javascript、javascript_files 或 css_files 方法:

class Entry(tornado.web.UIModule):
    def embedded_css(self):
        return ".entry { margin-bottom: 1em; }"
    def render(self, entry, show_comments=False):
        return self.render_string(
            "module-entry.html", show_comments=show_comments)

模塊 CSS 和 JavaScript 將被加載(或包含)一次,無(wú)論該模塊在頁(yè)面上使用多少次。CSS 始終包含在頁(yè)面的標(biāo)簽中,而 JavaScript 始終包含在頁(yè)面底部的標(biāo)簽之前。

當(dāng)不需要額外的 Python 代碼時(shí),模板文件本身可以用作模塊。例如,可以將前面的示例重寫為以下 module-entry.html:

{{ set_resources(embedded_css=".entry { margin-bottom: 1em; }") }}

這個(gè)修改后的模塊模塊可以參考:

{% module Template("module-entry.html", show_comments=True) %}

set_resources 函數(shù)只能通過(guò) {% module Template(...) %} 在模板中使用。與 {% include ... %} 指令不同,模板模塊對(duì)于它們的包含模板有一個(gè)明確的命名空間——它們只能看到全局模板命名空間和自己的關(guān)鍵字參數(shù)。

相關(guān)閱讀Relate

  • 法國(guó)簽證營(yíng)業(yè)執(zhí)照翻譯件模板 你與申根簽證只有一條推送的距離
  • 江蘇省增值稅發(fā)票翻譯模板 江蘇稅務(wù)局出口貨物退(免)稅申報(bào)管理系統(tǒng)軟件
  • 肄業(yè)證書翻譯模板 復(fù)旦大學(xué)學(xué)生學(xué)業(yè)證明文書管理細(xì)則(試行)
  • 四級(jí)英語(yǔ)作文模板帶翻譯 大學(xué)英語(yǔ)四級(jí)翻譯模擬訓(xùn)練及答案
  • 社會(huì)某信用代碼證翻譯模板 js驗(yàn)證某社會(huì)信用代碼,某社會(huì)信用代碼 驗(yàn)證js,js+驗(yàn)證+社會(huì)信用代碼證
  • 美國(guó)移民證件翻譯模板 日語(yǔ)簽證翻譯聊聊身份證翻譯模板
  • 翻譯軟件模板 人類史上*實(shí)用的的文檔快速翻譯指南
  • 江蘇省增值稅發(fā)票翻譯模板 江蘇出口貨物退(免)稅申報(bào)管理服務(wù)平臺(tái)
  • 瑞士簽證房產(chǎn)證翻譯件模板 瑞士探親簽證—就讀子女
  • 日語(yǔ)戶口本翻譯模板 戶口本翻譯價(jià)格_戶口本翻譯一般多少錢?
  • 模板匹配翻譯 模板和UI? www.angeldealglobal.com/fymb/9255.html
    ?
    本站部分內(nèi)容和圖片來(lái)源于網(wǎng)絡(luò)用戶和讀者投稿,不確定投稿用戶享有完全著作權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果侵犯了您的權(quán)利,請(qǐng)聯(lián)系:chinazxzy@163.com,及時(shí)刪除。
    Go To Top 回頂部
    • 掃一掃,微信在線