Jinja2过滤器,用于在flask视图中生成URL模式



我正在开发一个小的Flask应用程序来显示有关Cinema的数据。每家影院都有两个与自己相关的类别

  1. 语言-那部电影的语言。例如:英语、法语
  2. 类型-例如动作、喜剧、悬疑

用户案例 -有一个名为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()

模板/home:

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

你也需要我帮你安排路线吗?

最新更新