Rom*_*man 2 python jinja2 flask
我目前正在实施一个半径过滤系统。
用户可以搜索城市中的房间,根据搜索城市的纬度和经度,结果页面将显示半径 60 公里内的所有其他房间。
我找到了一个工作函数,我已经测试过了(尽管数字太高了,相对比例仍然显示正确的结果):
acos(sin(loc_latitude) * sin(zimmer.zimmer_lat) + cos(loc_latitude) * cos(zimmer.zimmer_lat) * cos(zimmer.zimmer_lng - (loc_longitude))) * 6371 <= 6000:
Run Code Online (Sandbox Code Playgroud)
我需要这个作为 jinja if 表达式:
{% if acos(sin(loc_latitude) * sin(zimmer.zimmer_lat) + cos(loc_latitude) * cos(zimmer.zimmer_lat) * cos(zimmer.zimmer_lng - (loc_longitude))) * 6371 <= 6000 %}
Run Code Online (Sandbox Code Playgroud)
但是在模板中 jinja 不知道我从 math 模块导入的 cos() 和 sin() 函数:
File "C:\Users\User\Eclipse-Workspace\Monteurzimmer\templates\zimmer_gefunden.html", line 149, in block "content"
{% if acos(sin(loc_latitude) * sin(zimmer.zimmer_lat) + cos(loc_latitude) * cos(zimmer.zimmer_lat) * cos(zimmer.zimmer_lng - (loc_longitude))) * 6371 <= 60 %}
UndefinedError: 'sin' is undefined
Run Code Online (Sandbox Code Playgroud)
有没有办法将这些函数传递给模板?
我看见了这个:
your_template.render(sin())
your_template.render(cos())
Run Code Online (Sandbox Code Playgroud)
但我不明白从哪里得到 your_template,因为我已经在渲染这样的模板:
return render_template('zimmer_gefunden.html', mymap=mymap, paginator_find=paginator_find, findroomcity=findroomcity,
form=form, pagenumber_find=pagenumber_find, all_rooms_in_city=all_rooms_in_city, pages_list_find=pages_list_find, all_einzelzimmer = all_einzelzimmer,
all_doppelzimmer = all_doppelzimmer, all_mehrbettzimmer = all_mehrbettzimmer, all_wohnung = all_wohnung,
loc_latitude = loc_latitude, loc_longitude = loc_longitude)
Run Code Online (Sandbox Code Playgroud)
或者还有其他方法吗?
来自Flask 文档:
为了将新变量自动注入模板的上下文中,Flask 中存在上下文处理器。上下文处理器在呈现模板之前运行,并且能够将新值注入模板上下文。上下文处理器是一个返回字典的函数。此字典的键和值然后与模板上下文合并,适用于应用程序中的所有模板
基本上,只需将此添加到您的代码中,您就可以在所有模板中使用这些功能。
from math import sin, cos, acos
@app.context_processor
def utility_processor():
return dict(cos=cos, sin=sin, acos=acos)
Run Code Online (Sandbox Code Playgroud)
将任何其他函数或变量添加到返回的内容中dict,使它们可用于您的模板。
| 归档时间: |
|
| 查看次数: |
1394 次 |
| 最近记录: |