Flask:带有 <a> 标签的 url_for 不会在浏览器中呈现
Flask : url_for with <a> tag doesn't get rendered in browser
这是我的模板代码 (menu.html) :
<html>
<body>
<h1>{{restaurant.name}}</h1>
{% for i in items %}
<div>
<p>{{i.name}}</p>
<p>{{i.description}}</p>
<p> {{i.price}} </p>
<a href='{{url_for('editMenuItem', restaurant_id = restaurant.id, menu_id = i.id) }}'>Edit</a>
</br>
<a href = '{{url_for('deleteMenuItem', restaurant_id = restaurant.id, menu_id = i.id ) }}'>Delete</a>
</div>
{% endfor %}
</body>
</html>
这是我调用 render_template()
函数的代码:
@app.route('/')
@app.route('/restaurants/<int:restaurant_id>/')
def restaurantMenu(restaurant_id):
restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one()
items = session.query(MenuItem).filter_by(restaurant_id=restaurant.id)
return render_template('menu.html',restaurant=restaurant,items=items)
进口:
from flask import Flask, render_template, url_for
我的问题是我的Edit
和Delete
锚标签根本不会被渲染!为什么会这样?
下面是 DOM :
编辑:1
事实上,我在 menu.html
中所做的任何更改都不会改变!即使它像添加静态文本一样简单。
你能在模板中试试这段代码吗?
<a href='{{url_for('editMenuItem', restaurant_id=restaurant.id, menu_id=items.id) }}'>Edit</a>
</br>
<a href = '{{url_for('deleteMenuItem', restaurant_id=restaurant.id, menu_id=items.id) }}'>Delete</a>
模板中不提供i
(i.id
),应该有items
(items.id
),因为那是后台代码中的参数名(render_template('menu.html',restaurant=restaurant,items=items)
).
关于模板中的所有更改,也许您需要清除缓存或使用Ctrl + Shift + R
键盘组合?
希望对您有所帮助。
您的问题是您试图在单引号字符串中使用单引号。您 可能 可以通过使用反斜杠转义引号来解决这个问题:\'
。但更简单的方法是将外部引号更改为双引号,即更改
<a href='{{url_for('editMenuItem', restaurant_id = restaurant.id,
menu_id = i.id) }}'>Edit</a>
至
<a href="{{url_for('editMenuItem', restaurant_id = restaurant.id,
menu_id = i.id) }}">Edit</a>
这是我的模板代码 (menu.html) :
<html>
<body>
<h1>{{restaurant.name}}</h1>
{% for i in items %}
<div>
<p>{{i.name}}</p>
<p>{{i.description}}</p>
<p> {{i.price}} </p>
<a href='{{url_for('editMenuItem', restaurant_id = restaurant.id, menu_id = i.id) }}'>Edit</a>
</br>
<a href = '{{url_for('deleteMenuItem', restaurant_id = restaurant.id, menu_id = i.id ) }}'>Delete</a>
</div>
{% endfor %}
</body>
</html>
这是我调用 render_template()
函数的代码:
@app.route('/')
@app.route('/restaurants/<int:restaurant_id>/')
def restaurantMenu(restaurant_id):
restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one()
items = session.query(MenuItem).filter_by(restaurant_id=restaurant.id)
return render_template('menu.html',restaurant=restaurant,items=items)
进口:
from flask import Flask, render_template, url_for
我的问题是我的Edit
和Delete
锚标签根本不会被渲染!为什么会这样?
下面是 DOM :
编辑:1
事实上,我在 menu.html
中所做的任何更改都不会改变!即使它像添加静态文本一样简单。
你能在模板中试试这段代码吗?
<a href='{{url_for('editMenuItem', restaurant_id=restaurant.id, menu_id=items.id) }}'>Edit</a>
</br>
<a href = '{{url_for('deleteMenuItem', restaurant_id=restaurant.id, menu_id=items.id) }}'>Delete</a>
模板中不提供i
(i.id
),应该有items
(items.id
),因为那是后台代码中的参数名(render_template('menu.html',restaurant=restaurant,items=items)
).
关于模板中的所有更改,也许您需要清除缓存或使用Ctrl + Shift + R
键盘组合?
希望对您有所帮助。
您的问题是您试图在单引号字符串中使用单引号。您 可能 可以通过使用反斜杠转义引号来解决这个问题:\'
。但更简单的方法是将外部引号更改为双引号,即更改
<a href='{{url_for('editMenuItem', restaurant_id = restaurant.id,
menu_id = i.id) }}'>Edit</a>
至
<a href="{{url_for('editMenuItem', restaurant_id = restaurant.id,
menu_id = i.id) }}">Edit</a>