2

我在一个非常简单的应用程序中遇到烧瓶 url_for('') 错误。

from flask import Blueprint, render_template, abort
from jinja2 import TemplateNotFound

base = Blueprint('main', __name__)

@base.route('/', defaults={'page':'home'})
@base.route('/<page>')
def show(page):
    try:
        return render_template('%s.html'%page, name='my name is')
    except TemplateNotFound:
        abort(404)

以上是我的蓝图文件,这些路线工作正常,但如果我尝试这样做

with flask.test_request_context():
    print url_for('home') #home.html or any other forms

我只是得到这个错误:

raise BuildError(endpoint, values, method)
werkzeug.routing.BuildError: ('home', {}, None)

谁能帮我弄清楚这里发生了什么?在我的 html 页面中,我可以打印出静态文件的位置:

{{ url_for('static', filename='style.css') }}

但如果我尝试这样做:

{{ url_for('home') }}

我再次得到同样的错误。有人对如何进行有一些建议吗?

4

2 回答 2

5

我想你是在尝试使用url_for错误的方式。 url_for通常将端点(即 python 函数/方法)映射到 url。在您的情况下home是参数的值,而不是端点。

因此,请改为使用您想要 url 的 python 函数的名称:

url_for('show', page='home')

应该是你要找的。

于 2014-10-20T06:35:48.070 回答
3

当你这样做{{ url_for('home') }}时,它不会返回 home.html 的路由,而是返回一个 function 的路由,home顺便说一句,它不存在。

因此,要解决您的问题,正确的使用方法url_for是:

{{ url_for('show') }}
于 2014-10-20T06:39:03.127 回答