• 总结下flask中的宏、Jinjia2语法


    这几天学的东西比较多,时间又有点不够用,趁着快吃饭了,赶紧总结总结。

    00x1 宏:

      如果学过C语言的童鞋,可能知道宏在C语言里面是一个定义一个固定参数的变量。在flask里面,宏是相当于一个函数的作用。不是像C语言的一个变量,而是定义了一个函数。这个函数是html的函数,霍霍,html还能有函数?是的呀,之前我也布吉鸟。知道之后先是嗯嗯嗯····,然后想了想,好像没啥用啊,我还不如直接写一个循环多方便。。。其实是我懒了,不想学这个东西了。并且这个宏,在我们项目中,我翻了一下,用在哪个地方呢?就是导入文件不是有一个url_for('static', filename = 'xxx'),我们只是把filename给省略了,其他地方就再也见不到宏了·····

       刚才已经说过了,宏是一个函数,那我们先写一个简单的宏。

      

    {% macro input(name = '', value = '' , type = 'text',class = 'class')  %}
    
    <input type="{{ type }}" name = "{{ name }}" ,value = "{{ value }}" ,class = "{{ class }}">
    {% endmacro %}
    

      其中先开始一个宏,然后再结束一个宏。并且想要引用这个宏的时候,只能是在宏的代码块中,其他地方再进行用的时候,就只能是再写一个了。

      详细解析
          宏里面定义了一个是input(),不是<input>。这个input(),里面定义的name和value····。然后下面的<input>标签相当于引用了,不过意义不大,这是我感觉的····

      具体的效果可以运行一遍看看(其实没啥效果)。

      宏的地方,还要知道宏是如何导入的

        这里引用的是一位(身高可能都比我高····)小姐姐的博客

      (1)import "宏文件的路径"as xxx(需要导入的宏的名字)
      (2)from “宏文件的路径” import 宏的名字 [as 宏的别名]([ ]中的可以不要)
      示例:

      

    {% from "macro.html" import input as input_filed %}
    <p>{{input_filed("username")}}</p>
    <p>{{input_filed("password",type="password")}}</p>


      注意:(1)宏的路径不要以相对路径去寻找,要以’templates’作为绝对路径去寻找。
         (2)如果想要在导入宏的时候,就把当前模板的一些参数传入给宏所在的模板,那么就应该在导入的时候使用’with context’。
    示例:from xxx.html import input with context

      

    00x2 jinjia2语法:

      jinjia2是flask框架中一个特有的语法。jinjia2语法跟jsp里面的语法类似(我只会那么一丢丢jsp,木的办法,java比python难多了)。可以先看下flask手册里面的jinjia2,flask手册里面的还是比较简单的,如果是看jinjia2手册的话,估计一看就懵逼了。jinjia2是在前端里面用到的,如果想要在html中写入python代码的吧,就需要用到jinjia2。

      flask 手册地址:http://docs.jinkan.org/docs/flask/templating.html#jinja

    jinjia2基础语法中:
      {% xxx %} 这样只有一个{}并且里面有一个%的,一般都是语句,比如for ,if extends....。这样的语句一般都是有始有终,都是成双入对的,除了extends,set,include.....

      {{}},这样两个括号放一块的地方,一般都是变量。比如{{ username }} ,username是变量。

    if 判断 :
      比如我要判断一个username是否为'abcd',那么我应该是写。

      { % if username == 'avcd' %}

      {% #先开始,再结束啦# %}

      {% endif % }

    for 循环:

      { % for循环 %}

      {% endfor %}

    set:

      set是定义一个变量的。如果前端没有传入一个lights这个变量,但是我还想要用。这时候就需要 {% set lights = 'xx' %} 。这样的话这个lights变量就能够在前端里面就能用了,这个地方可以观察下我在豆瓣那篇博客中的具体运用。

    include:
      include翻译过来是包括、包含的意思。如果说我们需要包含一个页面的话,就可以用一个{% include '要包含的html'%}。include用的不多,并且在include中可能会发生样式冲突(这个在有css的时候更明显),其实是包括的内容里面有重复的,html的解释器不知道该解释哪一个了,所以就会有冲突。

    extends:

      继承,这个在前端里面用到的相当多,可谓是一个重点的语法,但是用着是炒鸡简单的。比如我先写一个base.html,再新建一个Html,把html中里面的东西都给删了,直接一个{% extends 'base.html' %} ,这样就会把base.html里面的东西都拿过来了。需要注意的是,继承要写在第一行,不能随便乱写的。

     block:

       模块,block是和extends(继承)配合着用的,比如我要继承的里面,不想全部都是一个页面,这个时候我们可以用一个block,这个地方比较容易哦,{% block 命名 % } {% endblock %}。这样block代码块中的东西就不会是base.html中的了。

    附加:

      因为jinjia2的基础语法,比较容易,所以我没有是贴上演示代码和演示效果。想百尺竿头更进一步的,可以看看我写的那个微信小demo

      

     

  • 相关阅读:
    Swift基础学习
    APP的线程安全
    LintCode-O(1) Check Power of 2
    LintCode-Maximum Subarray Difference
    LintCode-Subarray Sum Closest
    LintCode-Rehashing
    Lintcode-Max Tree
    LintCode-Interleaving Positive and Negative Numbers.
    LintCode-Topological Sorting
    LintCode-Rotate String
  • 原文地址:https://www.cnblogs.com/Triangle-security/p/11362719.html
Copyright © 2020-2023  润新知