10

私のurls.pyファイルには、次のものがあります。

from myapp import views
...
(r'^categories/$', views.categories)

categories内のビュー関数はどこにありますかmyapp/views.py。他の URLconf 行は を参照しませんviews.categories

単体テスト ファイルでは、django.core.urlresolvers.reverse()'/categories/' (DRY など) をコピーするだけでなく、 を使用してこの URL を取得しようとしています。ので、私は持っています:

from django.core.urlresolvers import reverse
from myapp import views
...

url = reverse(views.categories)

テストを実行すると、次のNoReverseMatchエラーが表示されます。

NoReverseMatch: Reverse for '<function categories at 0x1082f30>' with arguments '()' and keyword arguments '{}' not found.

次のように、URL パターンを名前付きパターンにすると、うまく一致します。

url(r'^categories/$', views.categories, 'myapp-categories')

パターン名を使用して一致させます。

url = reverse('myapp-categories')

しかし、reverseドキュメントからわかる限り、使用するためだけに名前付き URL パターンにする必要はありませんreverse

私が間違っていることはありますか?

4

4 に答える 4

2

ジャックM.の例はほぼ正しいです。

名前付きURLを使用する場合は、タプルではなくurl関数である必要があります。

url(r'^no_monkeys/$', 'views.noMonkeys', {}, "no-monkeys"),
于 2008-09-25T22:55:44.153 に答える
2

さらに調査したところ、ビューモジュールのインポート方法に問題があったことがわかりました。

Djangoのreverse()関数への関数参照を正常に渡すにはどうすればよいですか?

助けてくれてありがとう、みんな:あなたは私にそれをきちんと見るように促しました。

于 2008-09-28T19:56:18.793 に答える
0

これは機能し、貼り付けたすべてのコードは正しく、正常に機能します (クリーンなテスト/プロジェクト アプリにコピーしたところ、問題なく URL が逆になりました)。あなたが私たちに見せていない何かがここで起こっています。動作するまで必要最小限の基本まで単純化してから、複雑さを加え始めて、どこが壊れているかを確認します。

また、「./manage.py shell」を実行してから、reverse 関数とビュー関数を対話的にインポートして、逆を試すこともできます。これにより、考えられる原因としてテスト セットアップが削除されます。

于 2008-09-25T20:39:30.517 に答える
-1

逆関数は、実際には URL の「名前」を使用します。これは次のように定義されます。

urlpatterns = patterns('',
    (r'^no_monkeys/$', 'views.noMonkeys', {}, "no-monkeys"),
    (r'^admin/(.*)', admin.site.root),
)

ここで、文字列「no-monkeys」を使用して reverse を呼び出して、正しい URL を取得します。

忍者の編集: これは、この件に関する django ドキュメントへのリンクです。

于 2008-09-25T17:18:16.197 に答える