如何将参数传递给这个 Flask Jinja 模板函数?

How can I pass parameters to this Flask Jinja template function?

这可行,但我想将参数变量值传递给 return render_template() 内的部分,这样我就可以重用 test(),我该怎么做?

""" Test.html """
@app.route('/test')
def test():
    """Renders the careers page."""
    return render_template(
        'content/loader.html',
        title='Test',
        year=datetime.now().year,
        message='Your Test page.',
        main_nav_active_ = '',
        layout_template = '/layouts/default.html',
        content_template = 'clarity.html'
    )

我希望能够基于路由使用这样的功能

""" Test.html """
def test(title,year,message, main_nav_active_, layout_template, content_template)
    """Renders the careers page."""
    return render_template(
        'content/loader.html',
        title=title,
        year=year,
        message=message,
        main_nav_active_ = main_nav_active_,
        layout_template = layout_template,
        content_template = content_template
    )

@app.route('/test2')
test(title='test2',year=datetime.now().year,message='Your Test page.', main_nav_active_='', layout_template='/layouts/default.html', content_template='clarity.html')

@app.route('/test3')
test(title='test3',year=datetime.now().year,message='Your Test page3.', main_nav_active_='', layout_template='/layouts/default.html', content_template='foo.html')

简单提取test:

def test(
        template='content/loader.html',
        title='Test',
        year=None,
        message='Your Test page.',
        main_nav_active_='',
        layout_template='/layouts/default.html',
        content_template='clarity.html'
    ):
    """Renders a particular page type."""
    return render_template(
        template,
        title=title,
        year=year if year is not None else datetime.now().year,
        message=message,
        main_nav_active_=main_nav_active_,
        layout_template=layout_template,
        content_template=content_template
    )

然后您可以使用 app.add_url_rule 将其注册到 URL 或将其用作其他路由定义的一部分:

app.add_url_rule("/test", "test", test)

# Or

@app.route("/another/<route>")
def alternatively(route_name):
    return test(title=route_name)
def test(**kwargs)
    """Renders the careers page."""
    return render_template(
        'content/loader.html',
        **kwargs
    )

@app.route('/test2')
def test2():
    return test(title='test2',year=datetime.now().year,message='Your Test page.', main_nav_active_='', layout_template='/layouts/default.html', content_template='clarity.html')

@app.route('/test3')
def test3():
    return test(title='test3',year=datetime.now().year,message='Your Test page3.', main_nav_active_='', layout_template='/layouts/default.html', content_template='foo.html')