0

reverseDjango でラップされたメソッドの使用に問題があります。ここに私の urls.py があります

...
urlpatterns = patterns('',
('/param_select/$',session_check(param_select)),
('registration/$',registration),
('result_show/(\d+)',session_check(result_show)),
('^expofit/$',media_clean(start)),
('result_pick/$',session_check(result_pick)),
('mail_report/$',session_check(mail_report)),
('notification/$',session_check(notification)),

reverseのみ成功することができますregistration

In [37]: from django.core.urlresolvers import reverse
In [38]: from expofit_django_app import views
In [38]: reverse(views.registration)
Out[38]: '/registration/'
In [42]: reverse(views.mail_report)
---------------------------------------------------------------------------
NoReverseMatch                            Traceback (most recent call last)
/home/alan/Desktop/expofit/expofit_env/local/lib/python2.7/site-packages/django/core/management/commands/shell.pyc in <module>()
----> 1 reverse(views.mail_report)

/home/alan/Desktop/expofit/expofit_env/local/lib/python2.7/site-packages/django/core/urlresolvers.pyc in reverse(viewname, urlconf, args, kwargs, prefix, current_app)
    474             resolver = get_ns_resolver(ns_pattern, resolver)
    475 
--> 476     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
    477 
    478 reverse_lazy = lazy(reverse, str)

/home/alan/Desktop/expofit/expofit_env/local/lib/python2.7/site-packages/django/core/urlresolvers.pyc in _reverse_with_prefix(self, lookup_view, _prefix, *args, **kwargs)
    394             lookup_view_s = lookup_view
    395         raise NoReverseMatch("Reverse for '%s' with arguments '%s' and keyword "
--> 396                 "arguments '%s' not found." % (lookup_view_s, args, kwargs))
    397 
    398 class LocaleRegexURLResolver(RegexURLResolver):

NoReverseMatch: Reverse for 'expofit_django_app.views.mail_report' with arguments '()' and keyword arguments '{}' not found.

状況は他のすべてのラップされたメソッドでも同じであり、ラップされていないメソッドでのみ機能するため、ラップされたメソッドを逆にすることに関係があると思います。解決策のアイデアはありますか?

4

1 に答える 1

1

URLに名前を付けるだけです-つまり

('/param_select/$', session_check(param_select), {}, 'param_select'),

次に、使用できます

reverse('param_select')

session_check別のアイデアは、デコレータとして書き直すことです。django のビルトイン ビュー デコレータ (つまり、 permission_required ) は良い出発点になります。

于 2013-03-11T19:32:15.923 に答える