2

これは頭​​を悩ませます。HttpResponseRedirect()フォーム処理 (ログイン/サインアップ) を実行し、入力に基づいてさまざまな を返すビューを持つアプリがあります。これらのリダイレクトにはすべてreverse()、適切な関数が文字列としてリストされたルックアップが含まれています。また、すべての関数には対応urlpatternする urls.pyがあります。

今朝まで、すべてが正常に機能していました。

現在、フォームを送信するたびに、Django は存在しない行の構文エラーを表示します。

SyntaxError at /logout/
invalid syntax (views.py, line 399)

(そのファイルには 354 行しかありません)

下にスクロールしてトレースバックを見ると、強調表示されている行は常にreturn HttpResponseRedirect( reverse('app.views.func') ).

これらの困惑するようなエラー メッセージのために、問題が本当にHttpResponseRedirect( reverse() )s にあるのかさえ確信が持てません。数日間そのコードに触れていないので、なぜ突然そのような奇妙なエラーが発生し始めるのかわかりません.

これをデバッグする助けがあれば大歓迎です!

4

1 に答える 1

3

関数のドキュメントを参照reverse()した後、最終的にそれを理解しました。

を呼び出すとreverse()、django は最初にプロジェクトの URLConf ファイルをインポートし、次に URLconf で宣言されているすべてのビュー モジュールをインポートします。私の問題は、まったく関係のない新しいビューに取り組んでいて、構文エラー (399 行目!) があったことでした。

そのため、新しいビューで何もしていないページを表示していなかったとしても、古いビューは、動作が原因で構文エラーが発生していましたreverse()

ドキュメントから:

あなたの見解がすべて正しいことを確認してください。どの URL 名がどのパターンにマップされるかを調べる一環として、reverse() 関数はすべての URLconf ファイルをインポートし、各ビューの名前を調べる必要があります。これには、各ビュー関数のインポートが含まれます。ビュー関数のインポート中にエラーが発生した場合、リバースしようとしているビュー関数でなくても、reverse() でエラーが発生します。

URLconf ファイルで参照するすべてのビューが存在し、正しくインポートできることを確認してください。まだ作成していないビューを参照する行は含めないでください。これらのビューはインポートできません。

于 2012-04-11T20:18:11.503 に答える