2016-02-02 5 views
0

Я пытаюсь реализовать простой веб-сайт меню ресторана, в котором отображается список ресторанов и их пунктов меню.TemplateSyntaxError без ключевого слова

newMenuItem - это функция, которая добавляет новый пункт меню в ресторан. MenuItem - таблица пунктов меню, Restaurant - таблица ресторанов, а restaurantmenu - это функция, которая отображает список пунктов меню в ресторане.

@app.route('/restaurants/<int:restaurant_id>/new', methods = ['GET', 'POST']) 
def newMenuItem(restaurant_id): 
    if request.method == 'POST': 
     newItem = MenuItem(name = request.form['name'], restaurant_id = restaurant_id) 
     session.add(newItem) 
     session.commit() 
     flash("new menu item created!") 
     return redirect(url_for('restaurantmenu', restaurant_id = restaurant_id)) 
    else: 
     return render_template('newmenuitem.html', restaurant_id = restaurant_id) 

restaurantmenu функция

@app.route('/restaurants/<int:restaurant_id>/', methods = ['GET', 'POST']) 
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) 

menu.html шаблон отображает список пунктов меню, которое где я пытаюсь показать флэш-сообщение. Его код

<html> 
<body> 
    <h1>{{restaurant.name}}</h1> 
    {% with messages = get_flashed_messages() %} 
     {% if messages %} 
      <ul> 
      {% for message in messages %} 
       <li>{{message}}</li> 
      {% endfor %} 
      </ul> 
     {% endif %} 
    {% endwith %} 
    <a href='{{url_for('newMenuItem', restaurant_id = restaurant.id)}}'>Create New Item</a> 
    {% 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> 
     <a href='{{url_for('deleteMenuItem', restaurant_id = restaurant.id, menu_id = i.id)}}'>Delete</a> 
     <br> 
    </div> 
    {% endfor %} 
</body> 
</html> 

Я понимаю, что «с» ключевым словом используется для очистки ресурсов как потоковое видео, но в этом случае, если я удалю это слово, я получаю TemplateSyntaxError при попытке отобразить пункты меню.

TemplateSyntaxError: Encountered unknown tag 'messages' 

Я не понимаю, как ключевое слово «с» заставляет все это работать. Без него не следует ли массивы сверкающих сообщений просто сохранять в переменную messages, к которой должен обращаться следующий цикл for?

ответ

1

Нет. Это язык шаблонов Jinja2, а не Python; with - как вы определяете переменную. На языке шаблона нет прямого назначения.

+0

Спасибо! Понял. –

Смежные вопросы