能否在Jinja模板中直接定义每次渲染自动更新的随机数?
问题解答
完全可以实现每次渲染模板时v参数自动更新的效果,Jinja没有内置的rand()全局函数,你可以根据需求选择以下三种方案:
方案1:使用当前时间戳作为参数(无需额外配置,最推荐)
时间戳天然具备每次渲染不重复的特性,非常适合作为资源缓存刷新的参数,直接用Jinja内置的now()函数即可实现:
<a href="http://{{ domain }}:8006/{{ path1 }}/{{ path2 }}/?v={{ now().timestamp()|int }}" target="_blank">link</a>
注意:
now()函数在Jinja2 2.10及以上版本默认支持,如果你使用的版本较低可以选择另外两种方案。
方案2:使用内置random过滤器生成随机数
如果你需要纯随机数而不是时间戳,可以用Jinja内置的random过滤器从指定数值范围中随机取值,下面的示例会生成和你原参数长度一致的13位随机数:
<a href="http://{{ domain }}:8006/{{ path1 }}/{{ path2 }}/?v={{ range(1000000000000, 9999999999999)|random }}" target="_blank">link</a>
方案3:自定义全局rand()函数
如果你就想使用{{ rand() }}的写法,可以在渲染模板的Python代码中提前注册全局函数:
from jinja2 import Environment import random # 初始化Jinja环境 env = Environment() # 注册rand全局函数,默认返回13位随机整数 env.globals['rand'] = lambda: random.randint(1000000000000, 9999999999999)
注册完成后你示例中的模板代码就可以直接运行了。
内容的提问来源于stack exchange,提问作者AGamePlayer
相关产品推荐
相关产品推荐

