Flask 视图中用于 URL 模式生成的 Jinja2 过滤器
Jinja2 filter for URL pattern generation in flask views
我正在开发一个小型 Flask 应用程序来呈现有关 Cinema 的数据。每个电影院都有两个与其相关的类别
- 语言 - 该电影院的语言。例如。英语、法语
- 类型 - 例如动作, 喜剧, 悬疑
用户案例 - 有一家名为 Inception
的电影院,使用 English
语言,属于 Suspense
类型。我想为 Inception
电影院的页面构建干净的 URL,例如 projectdomain.com/english/suspense/inception.
目前我正在通过 blueprint.context_processor
.
@blueprint.context_processor:
def cinema_processor():
def clean_cinema_name(cinema):
return '{0} / {1} / {2}'.format(cinema['language'], cinema['genre'],
cinema['name'])
但我想在 jinja2
自定义过滤器中执行此操作 - 我想这会容易得多。
如果有人已经完成了此类 jinja2
自定义过滤,请协助我。
到目前为止,您可以放心地假设 - 一个电影名称将只属于一种语言和类型。
下面是解决 Jinja2 过滤器方面问题的方法。
server.py:
import flask
app = flask.Flask(__name__)
def cinema_url(cinema):
return '/%s/%s/%s' % (
cinema['language'],
cinema['genre'],
cinema['name'],
)
# Register this function as a Jinja2 filter
app.jinja_env.filters['cinema_url'] = cinema_url
@app.route('/')
def home():
cinemas = [
{'name': 'Movie1', 'language': 'English', 'genre': 'action'},
{'name': 'Movie2', 'language': 'Spanish', 'genre': 'comedy'},
]
return flask.render_template('home.html', cinemas=cinemas)
app.run()
templates/home.html:
h1>Home</h1>
{% for cinema in cinemas %}
<li>
{# make use of the filter to create your URL #}
<a href="{{cinema|cinema_url}}">{{cinema['name']}}</a>
</li>
{% endfor %}
见http://flask.pocoo.org/docs/0.10/templating/#registering-filters
您也需要路由方面的帮助吗?
我正在开发一个小型 Flask 应用程序来呈现有关 Cinema 的数据。每个电影院都有两个与其相关的类别
- 语言 - 该电影院的语言。例如。英语、法语
- 类型 - 例如动作, 喜剧, 悬疑
用户案例 - 有一家名为 Inception
的电影院,使用 English
语言,属于 Suspense
类型。我想为 Inception
电影院的页面构建干净的 URL,例如 projectdomain.com/english/suspense/inception.
目前我正在通过 blueprint.context_processor
.
@blueprint.context_processor:
def cinema_processor():
def clean_cinema_name(cinema):
return '{0} / {1} / {2}'.format(cinema['language'], cinema['genre'],
cinema['name'])
但我想在 jinja2
自定义过滤器中执行此操作 - 我想这会容易得多。
如果有人已经完成了此类 jinja2
自定义过滤,请协助我。
到目前为止,您可以放心地假设 - 一个电影名称将只属于一种语言和类型。
下面是解决 Jinja2 过滤器方面问题的方法。
server.py:
import flask
app = flask.Flask(__name__)
def cinema_url(cinema):
return '/%s/%s/%s' % (
cinema['language'],
cinema['genre'],
cinema['name'],
)
# Register this function as a Jinja2 filter
app.jinja_env.filters['cinema_url'] = cinema_url
@app.route('/')
def home():
cinemas = [
{'name': 'Movie1', 'language': 'English', 'genre': 'action'},
{'name': 'Movie2', 'language': 'Spanish', 'genre': 'comedy'},
]
return flask.render_template('home.html', cinemas=cinemas)
app.run()
templates/home.html:
h1>Home</h1>
{% for cinema in cinemas %}
<li>
{# make use of the filter to create your URL #}
<a href="{{cinema|cinema_url}}">{{cinema['name']}}</a>
</li>
{% endfor %}
见http://flask.pocoo.org/docs/0.10/templating/#registering-filters
您也需要路由方面的帮助吗?