[Flask】Flaskにおけるurl_for()の落とし穴とは?
概要
Flaskの開発には必ずと言っていいほど落とし穴があるのですが、ここではflaskのユニットテストを使っているときに遭遇したurl_for()について踏み込みました。
落とし穴
<ブロッククオートurl_for()関数は、指定された 機能 のURLを指定します。
url_for オペレーションオブジェクトは 機能 であり、ルート内のパスではありません。
ルートと関数名が異なり、url_for()を使用してエラーが発生した場合、エラーを見つけるためにルートに移動しないでください。
例えば、以下のようなコードです。
from flask import Flask, url_for
app = Flask(\__name__)
@app.route('/')
def index():
pass
@app.route('/login')
def LOGIN():
pass
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('index'))
print(url_for('login'))
エラーは報告されず、バックスラッシュが表示されるだけです。
with app.test_request_context():
print(url_for('index'))
print(url_for('LOGIN'))
エラー報告、BuildError例外を投げる。
/
トレースバック (最も最近のコールバック):
ファイル "<\pyshell#12>", 行 3, in.
print(url_for('ログイン'))
File "C:\Python35╱Packages╱flaskhelpers.py", line 332, in url_for
return appctx.app.handle_url_build_error(error, endpoint, values)
ファイル "C:³³³³³.py", 行 1811, in handle_url_build_error
reraise(exc_type, exc_value, tb)
File "C:\Python35╱Packages╱flask_compat.py" line 33, in reraise
値を上げる
File "C:³³³³³.py" line 322, in url_for
force_external=external)
ファイル "C:³³³³³.py", 行 1758, in build
raise BuildError(endpoint, values, method, self) ビルドエラーを発生させる。
BuildError: エンドポイント 'login' の url をビルドできません。代わりに 'index' を意味するのですか?
ログインをLOGINに変更。
url_for()
正しく印刷されました。
/
/ログイン
パラメータ
_external
また、完全なURLが必要な場合など、いくつかのパラメータを設定することができます。
url_for('.static',_external=True,filename='pic/test.png')
をTureとする。
True
この方法で返されるurlは http://localhost/static/pic/test.png
-
エンドポイント
URLのエンドポイント(関数名) -
値
URLの可変パラメータ -
外部
に設定した場合True
を指定すると、絶対パス URL が生成されます。 -
スキーム
希望するURLスキームを指定する文字列。external パラメータを True に設定しないと ValueError がスローされます。 -
アンカー
これが設定されている場合、URLにmaoを追加します。 -
メソッド
これを設定すると、このHTTPメソッドが表示単位で呼び出されます。
参考にしてください。 http://dormousehole.readthedocs.io/en/latest/api.html#flask.url_for
この記事の最終更新日:2016年12月
関連
-
TensorFlowのエラー:ハッシュ化できない型:'numpy.ndarray'エラー
-
お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX2 解決策
-
python error TypeError: 'bool' object is not subscriptable
-
pythonがggplotパッケージを呼び出すとエラーが発生する AttributeError: 'DataFrame' オブジェクトに 'sort' 属性がない
-
Solve ImportError: cannot import name 'np_utils' from 'tensorflow.keras.utils'
-
ORMにおけるトランザクションとロック、Ajaxによる非同期リクエストと部分リフレッシュ、Ajaxによるファイルアップロード、日時指定Json、マルチテーブルクエリブックのシステム
-
scipyという名前のモジュールがない場合の解決策|エラー
-
Anaconda 詳細インストールおよび使用チュートリアル(画像付き)
-
WindowsでPython用のC拡張コンパイル環境をインストールする(「error: command 'cl.exe' failed: No such file or directory」を解決する。)
-
Django のプロンプト django-admin.py: コマンドが見つからない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
TypeErrorの解決策:Unicodeエラーへの強制力
-
[Python] error could not broadcast input array from shape (26) into shape (26,1)
-
[Django] CSRF 検証に失敗しました。
-
Python クローラーで AttributeError: 'NoneType' オブジェクトに属性 'text' がないエラー。
-
[Pythonノート】spyderのClearコマンド
-
Python が UnicodeDecodeError でファイルを読み込む: 'gbk' コーデックは xx 位置のバイト 0x80 をデコードできない: 解決策
-
Python2.7のエンコード問題:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position... 解決方法
-
python3 エラー。AttributeError: 'dict' object has no attribute 'iteritems' -- Solution
-
vscode debugging python file error AttributeError: 'NoneType' object has no attribute 'starswith'
-
pythonモジュールとImportError: xxx'という名前のモジュールがない問題