博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
阅读量:6225 次
发布时间:2019-06-21

本文共 1948 字,大约阅读时间需要 6 分钟。

Blog 项目源码:

目录

前文列表

扩展阅读

Jinja

Jinja:是 Python 实现的模板语言。

模板语言:是一种被设计出来自动生成文档的简单文本格式。在模板语言中,一般都会把一些变量传给模板,来替换模板中特定位置上的预先自定义好的占位变量名。向相同的模板文件(HTML+Python)传入不同的变量,达到生成格式相同但内容不同的网页文件,这个生成的过程被称之为渲染

变量名

Jinja 中的变量名都会定义在 {

{ variables }} 中,{
{}} 被称之为变量代码块

{
{ user.username }}

变量代码块中可以是任意的 Python 对象或类型,唯一的条件就是 {

{}} 中的变量必须能够被 Python 的 str() 内置方法转换成一个 String 类型对象。

注释

注释代码块使用 {# Documents #} 来表示。

控制语句

使用 {% controller_flow %} 来定义控制语句,{%%} 被称之为控制代码块,可以实现一些语言层次的功能。

if 语句

{% if user.is_logged_in() %}    Logout{% else %}    Login{% endif %}

循环

我们可以正常的循环迭代器或生成器函数。

  • NOTE 1:在 Jinja 中需要同时使用循环语句和 if 语句来模拟 continue 语句的功能。
{% for post in posts if post.text %}    

{
{ post.title }}

{

{ post.text | safe }}

{% endfor %}
  • NOTE 2:可以使用 Jinja 提供的 loop 变量来模型 Python 中的 enumerate() 内置函数的功能。 loop 变量可以返回一些关于 for 循环的信息,EG. 索引号。
{% for post in posts %}    {
{ loop.index }}-{
{ post.title }}{% endfor %}

过滤器

Jinja 过滤器实质上是 Jinja 提供的内置函数或自定义函数,这些内置函数与 Python 函数的类型,可以接收参数并返回结果。常用于处理变量代码块中的变量。在变量代码块中使用管道符 | 来调用。

无参数调用

{
{ variable | filter_name }}

带参数调用

{
{ variables | filter_name(*args) }}
  • NOTE 1:过滤器也可以在控制代码块 {%%} 中使用。
{% filter filter_name %}    codes{% endfilter %}

这样的话就可以对控制代码块中的代码进行处理。

:会返回一个 Jinja 模板或 HTML 字符串。其最主要的功能就是提高代码的重用性,我们可以将一个会被反复使用到的模板或 HTML 文件写成一个宏,然后就像调用函数一般,不断的被重用。

定义宏

{% macro input(name, label, value='', type='text')%}    
{% endmacro %}

这是一个带有 label 标签变量的 Bootstrao VSS 输入框。

  • input():是宏的名字,类似于函数名
  • (name, label, value='', type='text'):是宏的参数,类似于函数的必备参数和缺省参数

调用宏

{
{ input('name', 'Name') }}

结果

实际上是想宏定义中的形参 name/label/value/type 传入实参 ‘name’/’Name’,其余的使用了缺省参数,而这些被传入的参数会替换 HTML 中的变量代码块。

兼容 JavaScript

如果希望将 JavaScript 代码和 Jinja 代码写在同一个模板文件中而不引起混淆(JavaScript 也含有 {

{}} 语法),需要使用 raw 代码块来进行区分。

{% raw %}JavaScript statements{% endraw %}

转载于:https://www.cnblogs.com/jmilkfan-fanguiju/p/10589870.html

你可能感兴趣的文章
十分钟教程:用Keras实现seq2seq学习
查看>>
Netflix: 使用 React 构建高性能的电视用户界面
查看>>
在网站 Logo 上右击时提示下载网站的 Logo 素材下载
查看>>
移动端设计最佳实践
查看>>
运营商如何从NaaS中获益
查看>>
大数据计数原理1+0=1这你都不会算(一)
查看>>
艾普联手OPENSTACK 打造公众云
查看>>
从线上卖到线下,秘籍在这里|千牛头条双11直播
查看>>
李飞飞:为什么计算机视觉对机器人如此重要?
查看>>
数据的价值 删除无用数据可降低风险
查看>>
2017年五大关键云趋势:容器、AI等
查看>>
JedisPool资源池优化
查看>>
数据库安全专家指出数据库取证仍然落后
查看>>
5G新规范:个人网络速度不低于下行100兆 上行50兆
查看>>
TensorFlow博客翻译——DeepMind转向TensorFlow
查看>>
信息化治理与北京治堵:疏图同归
查看>>
专访Dan Kohn:阡陌交迭,云原生布局开源生态构建及深度应用
查看>>
在Linux中添加普通新用户
查看>>
beego小技巧两则:通过命令行自定义端口和环境,url中带有中划线处理
查看>>
跨国引入强势技术 安全行业又添生力军
查看>>