Flask:url_for <a> tag doesn&#39;t get rendered in browser

时间:2016-01-31 07:28:19

标签: python html flask-sqlalchemy url-for

here is my template code (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>

And here is my code where I invoke the render_template() function :

@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)

The import :

from flask import Flask, render_template, url_for

My problem is that my Edit and Delete anchor tags don't get rendered at all! Why is that so ?

Here is a look at the DOM : enter image description here

修改:1 事实上,我在menu.html所做的任何改变都没有改变!即使它像添加静态文本一样简单。

2 个答案:

答案 0 :(得分:2)

您的问题是您尝试在单引号字符串中使用单引号。您可能可以使用反斜杠转义引号来解决这个问题:\'。但更简单的方法是将外部引号更改为双引号,即更改

<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>

答案 1 :(得分:0)

你能在模板中试试这段代码吗?

<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>

不应在模板中提供ii.id),而应该有itemsitems.id),因为这是后端代码中的参数名称({ {1}})。

关于模板中的所有更改,您是否需要清除缓存或使用render_template('menu.html',restaurant=restaurant,items=items)键盘组合?

希望它有所帮助。