как заголовок говорит, что я получаю код ошибки при попытке сделать одну из моих страниц веб-сайта.jinja2.exceptions.UndefinedError Как определить «ресторан»
Вот части TRACEBACK, которые указывают на мой код:
File "/vagrant/catalog/project.py", line 48, in newMenuItem
return render_template('newMenuItem.html', restaurant_id=restaurant.id)
File "/vagrant/catalog/templates/newMenuItem.html", line 9, in block "content"
<form action="{{ url_for('newMenuItem', restaurant_id=restaurant.id) }}" method="POST">
File "/usr/lib/python2.7/dist-packages/jinja2/environment.py", line 397, in getattr
return getattr(obj, attribute)
UndefinedError: 'restaurant' is undefined
Как вы можете видеть, что это говорит мне, что «ресторан» не определен, сначала я думал, что, возможно, я не был правильно запросив мою базу данных, поэтому я дважды проверил этот раздел моего кода, и я не могу найти никаких проблем.
Вот мой питон модуль и соответствующий HTML-файл:
### Create new menu item. ###
@app.route('/restaurant/<int:restaurant_id>/menu/new/',
methods=['GET', 'POST'])
def newMenuItem(restaurant_id):
restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one()
if request.method == 'POST':
newMenuItem = MenuItem(name=request.form['name'],
description=request.form['description'],
price=request.form['price'],
restaurant_id=restaurant.id)
session.add(newMenuItem)
session.commit()
return redirect(url_for('showMenu', restaurant_id=restaurant.id))
else:
return render_template('newMenuItem.html', restaurant_id=restaurant.id)
и вот HTML файл newMenuItem:
{% extends "base.html" %}
{% block content %}
<div class="twelve columns">
New Item.
</div>
<div class="row">
<div class="six columns">
<form action="{{ url_for('newMenuItem', restaurant_id=restaurant.id) }}" method="POST">
<div class="row">
<div class="six columns">
<label for="Item Name">Item Name</label>
<input class="u-full-width" placeholder="New Item" name="name" type="text">
</div>
<div class="six columns">
<label for="Item Name">Item Description</label>
<input class="u-full-width" placeholder="Description" description="description" type="text">
</div>
<div class="six columns">
<label for="Item Name">Item Price</label>
<input class="u-full-width" placeholder="Price" price="price" type="text">
</div>
<div class="six columns">
<input class="button" value="Create" type="submit">
<a class="button" href="{{ url_for('showMenu', restaurant_id=restaurant.id) }}">Cancel</a>
</div>
</div>
</form>
</div>
</div>
{% endblock %}
У меня возникают проблемы с пониманием, почему эта ошибка бросают с этим конкретным , так как я использовал аналогичный код url_for для создания нового ресторана. Единственное, что я мог подумать, это вызвало бы эту проблему: мой шаблон не может определить идентификатор ресторана, где должен быть создан новый пункт меню. Я не уверен, как читать этот код ошибки, поскольку я не знаю, говорит ли он, что «ресторан» как переменная неопределен или что «ресторан» не определен в том смысле, что мой код не может назвать правильный идентификатор.
Любые предложения? Заранее спасибо за любую помощь.
Это решение. Спасибо за быстрый ответ! Это мой первый вопрос о stackoverflow, он говорит мне, что я должен подождать 8 минут, чтобы пометить вопрос так, как он решил, поэтому я сделаю это через несколько минут, – NoOrangeJuice