jinjia2库

django模板渲染

# setting 中配置静态模板文件路径
# TEMPLATES [{DIR[os.path.join(BASE_DIR,'templates')]}]  设置模板路径
# 查找顺序,先主 templates, 然后再 注册app中的 templatesfrom django.template.loader import render_to_string,render
from django.http import HttpResponse# render_to_string()
def index(request):html = render_to_string("index.html")return HttpResponse(html)# render()
def index(request):return render(request,"index.html")

flask 模板渲染

from flask import Flask,render_template
app = Flask(__name__,template_folder =r'C:\templates')  # template_folder 指明模板路径# render_template() 渲染模板、 **{} 可传递参数
@app.route('/about/')
def about():return render_template("about.html",**{'user':'lcl'})

控制语句(django + flask)

#  控制结构 {% %}
# 变量取值 {{ }}
# 注释 {# #}# if 语句
{% if user ="lcl" %}<p>{{user}}<p>
{% endif %}#  for 循环
{% for user in users %}
<li>{{ user.username|title }}</li>
{% endfor %}# for in empty 标签(遍历如果没有元素情况下,执行empty内容)
{% for person in persions %}<li>{{person}}</li>
{% empty %}<p>"暂时没有任何人"</p>
{% endfor%}{{loop.index}}       #当前迭代的索引(从 1 开始)
{{loop.index0}}     # 当前迭代的索引(从 0 开始)
{{loop.first}}      # 是否是第一次迭代,返回 true 或 false
{{loop.last}}       # 是否是最后1次迭代,返回 true 或 false
{{loop.length}}     # 序列的长度

模板中传递参数

django模板变量

from django.shortcuts import render
from django.template.loader import render_to_string
from django.http import HttpResponsedef index(request):content ={"name":"lcl"}html = render_to_string("index.html",context=content)return HttpResponse(html)# 模板文件
<html><p>{{name}}</p>
</html>

flask模板变量

flask.render_template(template_name_or_list, **context)   # 返回HTML模板
flask.render_template_string(source, **context)   # 模板内容
flask.get_template_attribute(template_name, attribute) # 模板中
<html><p>{{ name }}:{{age}}</p>     #对应 方式1<p>{{ context.name }}:{{context.age}}</p>     #对应 方式2
</html># views中
@app.route('/index')
def index():context = {'name':'lcl', 'age':18 }# render_template  返回模板文件return render_template("index.html",**context)   # 方式1return render_template("index.html",context= context)    # 方式2

url标签(django + flask)

# url 标签 href
<li><a href="www.baidu.com">百度首页</li># 对应路由
<li><a href="/move">电影首页</li># 路由变量对应(路由中一点要取名字)
<li><a href="{% url 'moive' %}">电影首页</li># url 标签中传参 2 为参数
<li><a href="{% url 'moive' 2 %}">电影首页</li>
<li><a href="{% url 'moive' mid=2 %}">电影首页</li>
<li><a href="{% url 'moive' mid=2 uid=1 %}">电影首页</li>  # 多个参数
<li><a href="{% url 'moive'%}?mid=2 ">电影首页</li>
<li><a href="{% url 'front:moive' 2 %}">电影首页</li>   # 加入引用命名空间
# 模板中的字符转义(Marup 转化变量中的特殊字符)
from flask import Markup
print(Markup("带有特殊字符的语句"))  # 直接打印带有特殊字符的语句,如果不进行转义 则特殊字符对应HTML中的标签# 定义404等错误响应(flask.abort函数)
from flask import Flask, render_template_string, abort
app = Flask(__name__)@app.route('/user')
def user():abort(401)  # Unauthorized 未授权print('Unauthorized, 请先登录')if __name__ == '__main__':app.run(port=5000, debug=True)# 自定义错误界面
from flask import Flask, render_template_string, abort
app = Flask(__name__)@app.route('/user')
def user():abort(401)  # Unauthorized@app.errorhandler(401)
def page_unauthorized(error):return render_template_string('<h1> Unauthorized </h1><h2>{{ error_info }}</h2>', error_info=error), 401if __name__ == '__main__':app.run(port=5000, debug=True)

模板过滤器

过滤符 含义
{{value/add:“2”}} 返回value值+2的值
{{value/cut:" "}} 移除所有指定的字符串
{{birthday/data:“Y/m/d”}} 将日期按照指定格式,格式成字符串
abs(value) 返回绝对值
default(value,feault_value,boolean= false) 如果前面变量没有值,则使用参数中的值代替
escape(value) 转义字符,会将<> 等字符转义成HTML中的字符
first(value) 返回一个序列的第一个元素
format(value,*arags,**kwargs) 格式化字符串
last(value) 返回序列的最后一个元素
length(value) 返回序列或字典的长度
join(value,d=u’’) 将一个序列用d这个值拼接成字符串
safe(value) 如果开启全局转义,那么safe过滤器将边量关掉转义
int(value) 将值转换为int类型
float(value) 将值转换为float类型
lower(value) 将字符串转换成小写
upper(value) 将字符串转换成大写
replace(value,old,new) 替换将old替换为new的字符串
truncate(value,length=255,killwords=False) 截取length长度的字符串
striptags(value) 删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格
trim 截取字符串前面和后面的空白字符
string(value) 将变量转换成字符串
wordcount(s) 将字符串转换成小写
int(value) 计算一个长字符串中单词的个数

flask/django常用标签

@app.route('/index')
def index():context = {'name':'lcl','age':18,'es':<script>slert("hello");</script>,'books':['python','java'] }# render_template  返回模板文件return render_template("index.html",**context)   # 方式1<p>{{ age|abs }}</p>      # 对 age 值取绝对值
<p>{{ student|default("默认值") }}</p>       # 若 student 没有值,则显示 默认值
<p>{{es}}</p>   # 自动开启转义
<p>{{es |escape }}</p>   # 开启自动转义字符<p>{{es| safe}}</p>      # 标记为安全,关闭转义{% autoescape off %}<p>{{es}}</p>            #  关闭转义
{% endautoescape %}<p>{{ books|first }}</p> # 取第一个值
<p>{{ books|last }}</p>     # 取最后一个值
<p>{{ books|length }}</p>   # 请求 books的长度
<p>{{ books|first|length }}</p>     # 第一个值的长度
<p>{{ books|last|last }}</p>
<p>{{ username|upper }}</p>     #将值全部大写
<p>{{ username|replace("hello","Hello") }}</p>      # 将老的值进行替换
<p>{{ username|truncate(length=5)}}</p>
<p>{{ username|truncate(length=5)}}</p>

模板结构优化 — 引入模板

# 模板引入 - 模板寻找方式与 templates 一致
{% include 'header.html' %}
{% include 'footer.html' %}

模板继承

# 模板继承
{% extends "base.html" %}{% block content %}<p>需要自己设置的内容</p>
{% endblock %}

django 模板加载静态文件

  1. django.contrib.staticfiles 已经添加到 settings.INSTALLED_APPS中(默认)
  2. 确保在settings.py中设置了STATIC_URL
  3. app下创建static文件夹,在static文件夹下创建当前app名字文件夹,将静态文件放入其中
  4. 如果静态文件不与任何app挂钩,那么在settings.py中添加 STATICFILES_DIRS,以后DTL就会在这个列表的路径中查找静态文件。
  5. 在模板中使用load标签加载 static 标签
# 2、setting.py中设置 STATIC_URL
STATIC_URL = "/static/"
# 4、设置 STATICFILES_DIRS
STATICFILES_DIRS = [os.path.join(BASE.DIR,"static")
]
# 设置全局 {% load static %}
# settings/TEMPLATES/OPTIONS
"builtins":['django.templatetaags.static']# 5、加载static/style.css 文件
{% load static %}
<link rel="stylesheet" href="{% static "style.css"%}"><div><img src="{% static "Django.jpg"%}" alt=""></div>

模板中的宏

# 宏(函数、执行动作)但不能有返回值  macro 定义  # 定义宏
{% macro input(name,age=18) %}   # 参数age的默认值为18<input type='text' name="{{ name }}" value="{{ age }}" >
{% endmacro %} # 使用宏(input为宏名)
<table><tr><td>用户名:</td><td>{{input('username')}}</td></tr><tr><td>密码:</td><td>{{input('password',type='psward')}}</td></tr><tr><td>提交:</td><td>{{input(value = '提交',type='submit')}}</td></tr>
</table># 宏文件的导入 - 将 marco.html 中的宏导入到当前文件中
{% import 'marco.html' as macro with context %}   # 导入宏,with context 为传参用
{{macro.input('username')}}       # 宏使用{% from "marco.html" import input %} # 导入
{{input('password',type='psward')}}        # 宏使用

jinjia2 模板库- django/flask相关推荐

  1. 7、Flask实战第7天:Jinjia2模板

    Jinja2模板介绍和查找路径 在前面的章节中,视图只是直接返回文本,然而在实际生产环境中其实很少这样用,因为实际的页面大多带有样式和复杂逻辑的HTML代码,这可以让浏览器其渲染出非常漂亮的页面. 我 ...

  2. python django flask介绍_Python开发WEB框架Flask详细介绍

    Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模 ...

  3. Django/Flask/Tornado三大web框架性能分析

    写在前面: 本文的数据涉及到之前遇到过的问题,大概一次 http 请求到收到响应需要多少时间.这个问题在实际工作中与框架有比较大的关系,因此特别就框架的性能做了一次分析. 这里使用之前的一个报告数据: ...

  4. Nginx截断uwsgi+Django(Flask)大响应体的问题及解决

    目录 症状 找到关键原因 解决 解决2 解决3 推演 症状 昨天一个一直续费的老客户,说网站出问题了.他的网站只是简单的展示型公司官网,用 Django 做的,日常做放放产品,连交易都没有,是2016 ...

  5. python template模块_Python模板库Mako的用法

    Mako是一个高性能的Python模板库,它的语法和API借鉴了很多其他的模板库,如Django.Jinja2等等. 基本用法 创建模板并渲染它的最基本的方法是使用 Template 类: from  ...

  6. Jinjia2模板引擎学习笔记

    Jinjia2 模板引擎 形式最简单的Jinjia2模板引擎就是一个包含响应文本的文件. 1渲染模板 默认情况下,flask在应用中的templates子目录里面寻找模板. flask提供的rende ...

  7. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  8. 提高C++性能的编程技术笔记:标准模板库+测试代码

    标准模板库(Standard Template Library, STL)是容器和通用算法的强效组合. 渐近复杂度:算法的渐近复杂度是对算法性能的近似估计.它是算法集到特定性能标准集的映射.如果需要对 ...

  9. C++中标准模板库std::vector的实现

    以下实现了C++标准模板库std::vector的部分实现,参考了 cplusplus. 关于C++中标准模板库std::vector的介绍和用法可以参考 https://blog.csdn.net/ ...

  10. C++中标准模板库std::pair的实现

    以下用C++实现了标准模板库中的std::pair实现,参考了 cplusplus 和 vs2013中的utility文件. 关于std::pair的介绍和用法可以参考: https://blog.c ...

最新文章

  1. python3使用SQLALchemy报错No module named ‘MySQLdb‘
  2. 如何修复 Flutter 中的“正在检查 Dart SDK 版本... << 此时出乎意料”错误?
  3. h5是什么 www.php.cn,html meta标签的作用是什么?
  4. 中电福富外包offer要等多久_记一次外包经历
  5. pil显示图片_Python之PIL模块使用
  6. 机器学习算法总结之聚类:K-means
  7. linux之vi,vim命令
  8. 软件设计架构中各模块breakdown
  9. vtd和vt的区别_英语中v,vi,vt有什么区别
  10. 特征锦囊:特征无量纲化的常见操作方法
  11. 解决node环境下SyntaxError: Cannot use import statement outside a module的问题
  12. 炎黄盈动易鲸云低代码平台,全面助推企业数字化转型升级
  13. 在docker中出现的僵尸进程怎么处理
  14. [fpga基础]基础元器件
  15. 【Unity 骨骼动画】骨骼IK
  16. 迈阿密色主题学科导航 HTML5静态开源
  17. Debian11安装帆软Finereport11服务器保姆版
  18. Qt使用三点坐标画圆弧
  19. 博文视点金秋新书大放送(1)
  20. 【Pyecharts|TreeMap】仿支付宝做一个基金重仓股票日涨跌幅图~

热门文章

  1. linux ov7725模块驱动,stm32f4 驱动ov7725摄像头,使用dcmi一直无法产生中断
  2. Ti-Click:通过浏览器快速搭建 TiDB 在线实验室 | Ti-可立刻团队访谈
  3. css2仿微信导航栏-滑动门
  4. 「How The Economic Machine Works」《经济机器是如何运转的》中文字幕
  5. react加水印_【REACT】 水印生成方案
  6. win10如何做到在指定目录下打开cmd命令窗口
  7. 以管理员身份打开cmd窗口
  8. 大数据平台的元数据管理
  9. excel冻结窗口怎么设置_粗暴讲解,2分钟 | 即懂excel 冻结首行、首列和单元格怎么弄?...
  10. html5 放风筝,北京最全的放风筝5大最佳地点,地广人稀,不用花钱