环境
:Python 3.6,烧瓶1.02,Jinja2
目标:
在layout.html(由content.html扩展)中创建动态菜单
然而,动态元素的url通常需要传递一个参数
发布声明
:
在呈现模板时,如何在jinja模板中传递url的参数?
我觉得我需要jinja中str().format的语法。
我试着:
1。将每个部分作为单独的值传递:
menus = [{'url': 'func_name', 'menu_title': 'title', 'param': 'param_name', 'param_val': 'param_value'}]
return render_template('content1.html', menus=menus]
在Jinja我试着这样称呼它:(我也试过不加加号和双引号)
{{ url_for(func_name), param_name+ "=" + param_val }}
在渲染过程中,它会给出
url_for()接受1个位置参数,但给出了2个
2。尝试使用{%set var_name:passed_variable%}
在服务器端定义的第一个菜单版本上构建,我试图在jinja中设置变量,但也失败了。
menus = [{'url': 'func_name', 'menu_title': 'title', 'param': 'param_name', 'param_val': 'param_value'}]
return render_template('content1.html', menus=menus]
金加
{% for menu in menus %}
{% set url = menu.get('url') %}
{% set param = menu.get('param') %}
{% set value = menu.get('param_val') %}
{% url_for(url, param + "=" + value %}
但也没用。
如果我给url_指定一个参数作为语法(不是硬连接的字符串),我就无法添加参数。
三。试图将URL的全部内容作为字符串传递:
menus={'url_string': " 'func_name', param_name=param_value"}
但它又失败了,因为url_for syntacs把整个放在了撇号之间,我不需要在最后加上撇号。
如果我为每个内容页面创建另一个导航条模板,它可能会起作用——但通过这种移动,我可以简单地将导航条移动到内容页面中。不过,这似乎很枯燥。
Stack Overflow topic
因此,问题是:
我怎么能通过
param_id=paramval['id']
用于呈现期间语法的url
{{ url_for('edit_question', param_id=paramval['id']) }}
代码/结构如下:
layout.html格式
{% for menu in menus %}
{% for key, value in menu.items() %}
{{ key }}
{% endfor %}
{% endfor %}
{% block content %}
{% endblock %}
content1.html内容
{% extends 'layout.html' %}
{% block content %}
content
{% endblock %}
content2.html网站
{%extends'layout.html'%}
{%block content%}
内容
{%endblock%}
App.Py
@app.route('/')
def index():
menus = [{'menu_title1': 'menu_func_name1'}]
return render_template('content1.html', menus=menus)
@app.route('/menu_details/')
def show_details_of_menu(menu_nr):
menus = [{'menu_title3': 'menu_func_name3', 'menu_param_name': 'menu_param_value'}
return render_template('content2.html', menus=menus)
对不起,文字墙..