zoukankan      html  css  js  c++  java
  • 模板

    Flask利用Jinja2的模板引擎,,为了丰富的扩展可用,所有的扩展是依赖于Jinja2的存在

    jinja2配置

    除非定制,Flask中Jinja2配置如下:

    所有以.html,.htm,.xml,.xhtml结尾的模板开启自动转义.

    一个模板可以用{%autosecape%}标签选择开关自动转义

    Flask在Jinja2上下文中插入了几个全局函数和助手,还有一些目前默认的值

    标准上下文

    下面的全局变量默认在jinja2模板中可用:

    config:

    当前配置对象(flask.config)

    request:当前请求对象(flask.request)

    session;当前会话对象(flask.session)

    g:实现全局变量的请求范围的对象(flask.g)

    url_for():flask.url_for()函数

    get_flashed_messages():flask.get_flashed_messages()函数

    Jinja 上下文行为

    这些变量被添加到上下文变量,它们不是全局变量。不同在于,它们默认不会 在导入模板的上下文中出现。这样做,一方面是考虑到性能,另一方面是为了让事情显式透明。

    对于你着意味着什么?如果你希望导入一个宏,你有两种可能来访问请求对象:

    1. 你显式地传入请求或请求对象的属性作为宏的参数。
    2. 使用 “with context” 导入宏。

    在上下文中导入的方式如下:

    {% from '_helpers.html' import my_macro with context %}

    标准过滤器:

    这些过滤器在jinja2中是可用的,也是Jinja2自带的过滤器

    toJson():这个函数把给定的对象转换成JSON表示,如果要动态生成JavaScript

    注意在script标签里面转义是不应该发生的,因此需要用|safe禁止转义

    控制自动转义:

    自动转义的概念是自动为你转义特殊字符.HTML意义下的特殊字符是&,>,<,"以及',因为这些字符在文档中表示他们特定的含义,需要在模板中禁用自动转义,这种情况可能是想要在页面显示的插入HTML,有三种方式:

    在Python代码中,在传递到模板之前,用Markup对象封装HTML字符串,在模板中使用safe过滤器显示标记一个字符串安全

    暂时的禁止自动转义系统,可以使用{%autoescape%}块在模板中禁用转义系统:

    {%autoescape false%}

    <p>autoescapeing is disabled

    <p>{{will_not_be_escapes}}

    {%endautoescape%}

    注册过滤器:

    在Jinja2中注册你自己的过滤器,两种方式,手动加入到jinja_env或者使用template_filter()装饰器

    @app.template_filter('reverse')

    def reverse_filter(s):

    return s[::-1]

    def reverse_filter(s):

    return s[::-1]

    app.jinja_env.filters['reverse'] = reverse_filter

    在使用装饰器的情况下,

    {%for x in mylist | reverse%}

    {%endfor%}

    上下文处理器

    Flask中的上下文处理器自动向模板的上下文插入新变量,上下文处理器在模板渲染之前运行,并且可以在模板上下文中插入新值,上下文处理器是一个返回字典的函数,这个字典的键值将与应用中的所有模板上下文结合:

    @app.context_processor

    def inject_user():

    return dict(user=g.user)

    上诉的上下文处理器使得一个名为user,值为g.user的变量在模板中可用,因为g在任何模板中都是可用的,

    变量不仅限于值,一个上下文处理器也可以使函数在模板中可用(由于Python允许传递函数)

    @app.context_processor

    def utility_processor():

      def format_price(amount,currency=u'$'):

        return u{0:.2f}{1}.format(amount,currency)

      return dict(format_price = formatprice)

    上面的上下文处理器使得format_price函数在所有模板中可用:

    {{format_price(0.33)}}

  • 相关阅读:
    spring对事务的配置
    Mysq中的流程控制语句的用法
    mysql存储过程和常用流程控制
    ztree更换节点图标
    eclipse调试(debug)的时候,出现Source not found,Edit Source Lookup Path,一闪而过
    myeclipse如何设置或关闭断点调试自动跳入debug模式
    Druid数据源对数据库访问密码加密好麻烦
    js中if()条件中变量为false的情况
    TFS2008 安装图解(详细版本)(转载)
    数字格式化
  • 原文地址:https://www.cnblogs.com/suncunxu/p/11281927.html
Copyright © 2011-2022 走看看