1

だから私はそのように設定されたビューを持っています:

class toi(FlaskView):
    def index(self):
            ...
            return render_template('home.html')

    @route('/api/')
    @route('/api/<int:urlgid>/')
    @route('/api/<int:urlgid>/<int:urlper>/')
    def APIInstruction(self, urlgid=None, urlper=None):
        return render_template('toi-instructions.html')

そして、メインの app.py に

from views.toi import toi
toi.register(app)

そして、toi:index が出力している HTML には、

... <a href="{{ url_for('toi:APIInstruction') }}">how to use the API</a>  ...

これによりBuildErrorが発生し(詳細はありません)、これを理解しようとして髪を引っ張っています。@routes を削除すると、エラーはなくなります。2 番目と 3 番目の @route を削除しても、ビルド エラーは発生しません。url_for() 関数に urlgid と urlper を入れても何も変わりません。エンドポイントを変更してみました。url_for を toi:api に変更してみました。

この BuildError の原因がどこにあるのかわかりません。

4

1 に答える 1

1

1 つのビューに複数のルートを使用すると、複数のエンドポイントが作成されます (ルートごとに 1 つ)。各エンドポイントを区別しやすくするために、Flask-Classy は予想されるルート名の末尾にインデックスを追加します。順序は、最後に定義されたルートから始まる 0 から n です。あなたの例を考えると:

@route('/api/') # use: "toi:APIInstruction_2"
@route('/api/<int:urlgid>/') # use: "toi:APIInstruction_1"
@route('/api/<int:urlgid>/<int:urlper>/') # use: "toi:APIInstruction_0"
def APIInstruction(self, urlgid=None, urlper=None):
    return render_template('toi-instructions.html')

この動作の詳細については、http: //pythonhosted.org/Flask-Classy/#using-multiple-routes-for-a-single-viewをご覧ください。

@routeまたは (これは私が好む方法です)、任意のデコレーターで明示的に使用するエンドポイントを指定することもできます。例えば:

@route('/api/', endpoint='apibase')

次を使用してアクセスできます。

url_for('apibase')
于 2013-09-20T02:46:15.303 に答える