でdjango.shortcuts.redirectを理解するreverse
とについてのスレッドを開始しましたredirect_to
。
reverse
最初のパラメーターが文字列の場合、どのように機能するかを理解するのにまだ問題があります。https://docs.djangoproject.com/en/1.4/topics/http/shortcuts/#django.shortcuts.redirectを何度も読み、対応する部分をreverse
. しかし、私はまだNoReverseMatch
例外を受けています。
私のROOT_URLCONF
中で私は持っています
urlpatterns = patterns('',
url(r'^$', redirect_to, {'url': '/monitor/'}),
url(r'^monitor/', include('monitor.urls')),
)
私monitor.urls
が持っている
urlpatterns = patterns('monitor.views',
(r'^$', 'index'),
(r'^list', 'listall'),
)
で、monitor.urls
両方の関数のコードを定義index
しましlistall
た。次listall
の行を追加しました。
def listall(request):
<more code goes here>
print "reversing 1 index: %s " % reverse(index)
print "reversing 2 index: %s " % reverse('index')
render_to_response("monitor/list.htmld", params)
localhost:3000/monitor/list にアクセスすると、
reversing 1 index: /monitor/
2番目reverse
は例外を発生させます。なんで?私は何が欠けていますか?
私はそれをdjangosコードdjango.core.urlresolvers.callable
とdjango.core.urlresolvers.get_mod_func
. get_mod_func
「ab」のようなものを期待しているようです。callable
そのため、最初の行で「index」が返されましfunc_name
たが、の場合は空の文字列が返されましmod_name
た。2行目を次のように変更しました
print "reversing 2 index: %s " % reverse('monitor.views.index')
そしてそれは意図したとおりに機能しました。reverse
では、完全なモジュール名と関数名 (文字列を使用する場合) を使用して呼び出す必要があるのに、ドキュメントではそうではないのはなぜですか? 私は何が欠けていますか?
ありがとう