1

我正在尝试在 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)
4

1 回答 1

0

这适用于 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/

于 2014-05-14T06:06:35.057 回答