Удалить ссылку для приложения Flask

Я пытаюсь настроить ссылку в приложении Flask для метода удаления. Однако когда я пытаюсь перейти на страницу, на которой она находится, я получаю следующую ошибку:

werkzeug.routing.BuildError

BuildError: ('delete', {}, None)

Метод delete(), который я пытаюсь использовать, на данный момент является всего лишь фиктивным методом, но я даже не могу загрузить страницу, чтобы начать ее тестирование. Вот код, который я пробовал:

Шаблон:

{% block main_content %}
        <table cellspacing="0" id="grid_view">
            <tbody>
                <tr>
                    <th>Shelf Name</th>
                    <th>Bins on Shelf</th>
                    <th></th>
                </tr>
                {% for shelf in shelf_list %}
                    <tr>
                        <td>{{ shelf.name }}</td>
                        <td>List of bins will be here with CRUD links</td>
                        <td><a href="{{ url_for('delete') }}">Delete</a></td>  # problem here
                    </tr>
                {% endfor %}
            </tbody>
        </table>
    {% endblock %}

и метод:

@app.route('/delete')
def delete():
    return 'Something was deleted'

полная трассировка стека:

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__

return self.wsgi_app(environ, start_response)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app

response = self.make_response(self.handle_exception(e))

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception

reraise(exc_type, exc_value, tb)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app

response = self.full_dispatch_request()

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request

rv = self.handle_user_exception(e)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception

reraise(exc_type, exc_value, tb)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request

rv = self.dispatch_request()

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request

return self.view_functions[rule.endpoint](**req.view_args)

File "main.py", line 53, in shelves

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/templating.py", line 128, in render_template

context, ctx.app)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/templating.py", line 110, in _render

rv = template.render(context)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/jinja2/environment.py", line 969, in render

return self.environment.handle_exception(exc_info, True)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/jinja2/environment.py", line 742, in handle_exception

reraise(exc_type, exc_value, tb)

File "/home/ian/PycharmProjects/flasktest/templates/shelves.html", line 1, in top-level template code

{% extends 'layout.html' %}

File "/home/ian/PycharmProjects/flasktest/templates/layout.html", line 35, in top-level template code

{% block main_content %}

File "/home/ian/PycharmProjects/flasktest/templates/shelves.html", line 30, in block "main_content"

<td><a href="{{ url_for('delete') }}">Delete</a></td>

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/helpers.py", line 312, in url_for

return appctx.app.handle_url_build_error(error, endpoint, values)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/app.py", line 1641, in handle_url_build_error

reraise(exc_type, exc_value, tb)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/flask/helpers.py", line 305, in url_for

force_external=external)

File "/home/ian/PycharmProjects/flasktest/lib/python2.7/site-packages/werkzeug/routing.py", line 1620, in build

 [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] raise BuildError(endpoint, values, method)

person kylieCatt    schedule 26.01.2014    source источник
comment
Flask не имеют зарезервированных имен для конечных точек, а delete не имеют специального имени для python. У меня этот метод работает нормально, но у меня такая же ошибка, когда я комментирую маршрут delete. Вы полностью перезапустили приложение перед добавлением нового маршрута?   -  person tbicr    schedule 27.01.2014
comment
У меня он работает в режиме отладки с включенным перезагрузчиком. Попробую полностью перезагрузить сервер.   -  person kylieCatt    schedule 27.01.2014


Ответы (1)


У меня это работает на Flask 0.9:

from flask import Flask, render_template
app = Flask(__name__, template_folder='templates')

@app.route("/", methods=["GET"])
def hello():
    return render_template('TEMP.html')`

@app.route('/delete', methods=["GET"])
def delete():
    return 'Something was deleted

if __name__ == "__main__":
    app.run(debug=True)`

и TEMP.html:

<a href="{{ url_for('delete') }}">Delete</a>

Я часто получаю эту ошибку, когда использую чертежи. Если вы прикрепляете свое приложение в качестве чертежа к другому приложению, вам нужно поставить точку перед именем функции, чтобы url_for('delete') превратился в: url_for('.delete'). см. http://flask.pocoo.org/docs/blueprints/

person gilsho    schedule 14.05.2014