18

インターウェブ上で同様の問題を抱えている人を 1 人か 2 人見つけましたが、どこにも解決策が投稿されていません。以下のコード/テンプレートからビルド エラーが発生しましたが、問題の場所や原因がわかりません。テンプレートが関数を認識していないようですが、なぜこれが発生するのかわかりません。どんな助けでも大歓迎です - 私は今2晩キーボードを叩いています。

関数:

@app.route('/viewproj/<proj>', methods=['GET','POST'])
def viewproj(proj):

...

テンプレートの抜粋:

{% for project in projects %}
  <li>
<a href="{{ url_for('viewproj', proj=project.project_name) }}">
{{project.project_name}}</a></li>
{% else %}
No projects
{% endfor %}

エラーログ: https://gist.github.com/1684250

編集:また、URL を作成するときに変数「proj」を認識しないことを含めたかったので、値をパラメーターとして追加するだけです。以下に例を示します: //myproject/viewproj?projname=what+up

最後の数行:

[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128]   File "/srv/www/myproject.com/myproject/templates/layout.html", line 103, in top-level template code, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128]     {% block body %}{% endblock %}, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128]   File "/srv/www/myproject.com/myproject/templates/main.html", line 34, in block "body", referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128]     <a href="{{ url_for('viewproj', proj=project.project_name) }}">, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128]   File "/usr/lib/python2.7/dist-packages/flask/helpers.py", line 195, in url_for, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128]     return ctx.url_adapter.build(endpoint, values, force_external=external), referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128]   File "/usr/lib/pymodules/python2.7/werkzeug/routing.py", line 1409, in build, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128]     raise BuildError(endpoint, values, method), referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] BuildError: ('viewproj', {'proj': '12th'}, None), referer: xx://myproject.com/
4

7 に答える 7

25

url_for は関数を探します。呼び出したい関数の名前を渡します。したがって、次を使用する必要があります。

{{ url_for('viewproj', proj=xxx) }}

私は同じ問題を抱えています。そして、次のように解決しました:Flaskエラー:werkzeug.routing.BuildError

于 2013-04-05T16:04:55.097 に答える
0

テンプレートで「project.project_name」が正しく解決されているかどうかを確認します。テンプレートに「プロジェクト」を正しく渡していますか? 代わりに「proj」の値をハードコードして、URL が生成されていることを確認します。何かのようなもの:-

<a href="{{ url_for('viewproj', proj='new_project') }}">new project</a>
于 2012-01-27T13:45:15.387 に答える
0

という名前のルーティングされた関数が複数ある可能性がありますviewproj

それに加えて、投稿した出力は、投稿したテンプレート コードと一致しません。に渡されたmyproject/viewproj?projname=what+upことを意味しますが、ビュー関数はprojname=...url_for()proj=...

于 2012-06-01T17:15:26.883 に答える
-3

そのエンドポイントで使用できるメソッドを指定するときに、必要なメソッドを url_for に渡す必要があると思います。

url_for('viewproj', proj=project.project_name, method='GET')
于 2012-01-27T07:59:12.277 に答える
-4

私は同じ問題をグーグルで検索し、これを見つけたので、少し叩いた後、何がうまくいったかを投稿すると思いました(他の誰かがここに着陸した場合に備えて)。文字列の連結の問題にすぎないようです

作業コードを誤って「翻訳」しました。

{% for project in projects %}
    <li>
    <a href="{{ url_for('viewproj', proj='%s') }}"|format(project.project_name)>
    {{project.project_name}}</a>
    </li>
{% else %}
    No projects
{% endfor %}

上記のコードの興味深い効果は、「パディング」です。リンクURLに追加

しかし、よく考えてみると、url_for がテンプレートに値を追加するかどうか疑問に思っていました。次の行は、アンカー タグに対して同じことを実現します。

<a href="viewproj/{{ project.project_name }}">{{ project.project_name }}</a> 
于 2012-06-01T17:04:37.050 に答える