标签:模板基础
flask之二 模板相关templates
目录下查找模板app = Flask(__name__,template_folder=‘C:/templates‘) #template_folder可以指定模板位置
render_template
渲染模板的时候,可以传递关键字参数,以后直接在模板中使用就可以了**
将字典打散成关键字参数。
小例子:
from flask import Flask,render_template
app = Flask(__name__)
app.debug = True
@app.route(‘/‘)
def hello_world():
context = {
‘username‘: ‘wanghui‘,
‘age‘:19,
‘children‘:{
‘user‘:‘ccc‘,
‘type‘:‘stu‘,
}
}
return render_template(‘index.html‘, **context)
# return render_template(‘index.html‘,context=context)
# return render_template(‘index.html‘,username=‘wanghui‘,age=19)
if __name__ == ‘__main__‘:
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>my blog</title>
</head>
<body>
<h1>这是模板渲染的数据</h1>
{#<p>{{ username }}</p>#}
{#<p>{{ age }}</p>#}
{{ context.username }}
{{ context.age }}
<p>{{ username }}</p>
<p>{{ children.user }}</p>
</body>
</html>
模板中的
url_for
和视图函数中的url_for
是类似的,也是传递视图函数的名字,也可以传递参数。使用的时候,需要在url_for
两边加上一个{{ url_for(‘func_name‘),ref=‘/‘,id=‘1‘}}
from flask import Flask,render_template,url_for
app = Flask(__name__)
app.debug = True
@app.route(‘/‘)
def hello_world():
return render_template(‘index.html‘)
@app.route(‘/accounts/login/<id>/‘)
def login(id):
return render_template(‘login.html‘)
if __name__ == ‘__main__‘:
app.run(port=8888)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>my blog</title>
</head>
<body>
<h1>这是从模板中渲染的</h1>
<p><a href="{{ url_for(‘login‘,ref=‘/‘,id=‘1‘) }}">登陆</a></p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login page</title>
</head>
<body>
<h1>这是登录页面</h1>
{#{{ 用来存放变量 }}#}
{#{% 用来执行函数或者逻辑代码 %}#}
</body>
</html>
有时候我们需要在模板中对一些变量进行处理,那么就必须要类似于python中的函数一样,可以将这个值传到函数中,然后做一些操作。在模板中过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器会根据自己的功能,再返回相应的值,之后再将结果渲染到页面上。
{{ variable |过滤器的名字 }}
{{ "%s" - "%s"|format(‘Hello?‘,"Foo!") }}将输出:Helloo? - Foo!
content_html|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):计算一个长字符串中单词的个数。
{{ value|default(‘默认值‘)}}
,如果value这个key
不存在的话就使用过滤器提供的默认值;如果类似于python
中判断一个值是否为False(例如:空字典,空字符串,空列表的话)那么久必须要传递另外一个参数{{ value | default(‘默认值‘,boolean=True)}}
;or
来替换default(‘默认值‘,boolean=True)
(例如{{ siginature or ‘此人很懒没有留下任何说明‘}})from flask import Flask,render_template
app = Flask(__name__)
@app.route(‘/‘)
def index():
context = {
‘position‘:-9,
‘signature‘:‘‘,
#‘signature‘:‘this ismy blog‘
}
return render_template(‘index.html‘,**context)
if __name__ == ‘__main__‘:
app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MyBlog</title>
</head>
<body>
{#<p>个性签名:{{ signature|default(‘此人很懒没有留下任何说明!‘,boolean=True) }}</p>#}
<p>个性签名:{{ signature or ‘此人很懒没有留下任何说明!‘}}</p>
</body>
</html>
safe
过滤器:可以关闭一公分字符串的自动转义escape
过滤器:对某个字符串进行转义autoescape
过滤器:可以对其代码框内的代码块关闭自动转义- first:返回序列中的第一个元素
truncate
:指定长度截取(结合striptags去除掉html字段之后截取纯净字符串然后按字数去做预览页填充)striptags
:去除标签中的html字段from flask import Flask,render_template
app = Flask(__name__)
@app.route(‘/‘)
def hello_world():
context = {
‘position‘:-9,
‘signature‘:‘<script>alert("Hello world!")</script>‘,
‘persons‘:[‘abc‘,‘def‘],
‘age‘:"18",
‘article‘:‘hello hello xxooo xxooo!!‘
}
return render_template(‘index.html‘,**context)
if __name__ == ‘__main__‘:
app.run(debug=True,port=8080)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MyBlog</title>
</head>
<body>
{#{% autoescape off %}#}
{#<p>个性签名:{{ signature }}</p>#}
{#{% endautoescape %}#}
<p>{{ signature|safe }}</p>
<p>{{ persons|first }}</p>
<p>{{ persons[0] }}</p>
<p>{{ persons|last }}</p>
<p>{{ persons[-1] }}</p>
<p>{{ "我的名字是%s"|format("hello word!") }}</p>
<p>{{ "人数是 %d"|format(persons|length) }}</p>
{% if age|int == 18 %}
<p>年龄是18岁</p>
{% else %}
<p>年龄不是18岁</p>
{% endif %}
<p>{{ article|replace(‘hello‘,‘sssssz‘) }}</p>
<p>{{ article|truncate(length=5) }}</p>
<p>{{ signature|striptags }}</p>
</body>
</html>
@app.template_filter(‘过滤器名称‘)
app.config[‘TEMPLATES_AUTO_RELOAD‘] = True
**from flask import Flask,render_template
app = Flask(__name__)
app.config[‘TEMPLATES_AUTO_RELOAD‘] = True
@app.route(‘/‘)
def hello_world():
context={
‘article‘:‘anyway hello anyway hello abccc‘
}
return render_template(‘index.html‘,**context)
@app.template_filter(‘cut‘)
def cut(value):
vaule = value.replace("hello","sbsb")
return value
if __name__ == ‘__main__‘:
app.run(debug=True,port=9090)**
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>myblog</title>
</head>
<body>
<p>{{ article|cut }}</p>
</body>
</html>
from flask import Flask,render_template
from datetime import datetime
app = Flask(__name__)
app.config[‘TEMPLATES_AUTO_RELOAD‘] = True
@app.route(‘/‘)
def index():
context={
‘article‘:‘aaa bbb ccc‘,
‘create_time‘:datetime(2018,02,23,10,12,11)
}
return render_template(‘index.html‘,**context)
@app.template_filter(‘handle_time‘)
def handle_time(time):
‘‘‘
1.距离现在的时间多久,如果间隔在一分钟以内就表示刚刚
2.在一小时以内就显示xx分钟前
3.在24小时以内就显示xx小时前
4. 在一个月之内就显示多少天之前
5. 否则就显示具体的时间
:param time:
:return:
‘‘‘
if isinstance(time,datetime):
now = datetime.now()
timestamp = (now - time).total_seconds() #获取间隔秒数
if timestamp < 60:
return "刚刚"
elif timestamp >=60 and timestamp<= 60*60:
minutes = timestamp/60
return "%s分钟前",int(minutes)
elif timestamp >= 60*60 and timestamp <= 60*60*24:
hours = timestamp/(60*60)
return "%s小时前",int(hours)
elif timestamp >= 60*60*24 and timestamp<= 60*60*24*30:
days = timestamp/(60*60*24)
return "%s天前",int(days)
else:
return time.strftime(‘%Y-%m-%d %H:%M‘)
if __name__ == ‘__main__‘:
app.run(port=9092,debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MyBlog</title>
</head>
<body>
<p>发表时间:{{ create_time|handle_time }}</p>
</body>
</html>
标签:模板基础
原文地址:http://blog.51cto.com/11696827/2089291