Django:resolve:NoReverseMatch:尝试了0个模式

时间:2015-12-04 09:05:15

标签: django django-views

我试图在这里关注示例: https://docs.djangoproject.com/en/1.8/topics/class-based-views/intro/#s-mixins-that-wrap-as-view

所以这是我的代码:

'a.id.id'

在我的class LoginRequiredMixin(object): @classmethod def as_view(cls, **initkwargs): view = super(LoginRequiredMixin, cls).as_view(**initkwargs) print(reverse('my_home_login')) return login_required(view, login_url=reverse('my_home_login')) class MyHomeView(LoginRequiredMixin, generic.View): template_name = 'my_home/index.html' def get(self, request, *args, **kwargs): print(reverse(r'my_home_login')) return render(request, self.template_name, {}) class MyHomeLoginView(generic.View): template_name = 'my_home/login.html'

urls.py

在日志文件中,我可以看到urlpatterns += i18n_patterns( # blabla some routes, then: url(_(r'^my-home$'), app_my_home.MyHomeView.as_view(), name='my_home_index'), url(_(r'^my-home/login$'), app_my_home.MyHomeLoginView.as_view(), name='my_home_login'), ) 中首先调用print(reverse('my_home_login'))(这是合乎逻辑的),但无法解决“多语言”路径:

LoginRequiredMixin

在我的环境中,我将NoReverseMatch: Reverse for 'my_home_login' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 置于最顶端:

LocaleMiddleware

如果我在MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', # ... ) 中执行断点,我会看到不考虑翻译。

如果我以这样的“未翻译”模式添加路线:

urlresolvers.py

我尝试在mixin中urlpatterns = [ url(r'^login/$', app_my_home.MyHomeLoginView.as_view(), name='login_only'), ] ,然后它可以工作.. reverse('login_only')似乎没有使用翻译网址(LoginRequiredMixin)。我错过了什么?

2 个答案:

答案 0 :(得分:2)

reverse中使用reverse_lazy代替as_view。 <{1}}方法在网址完全加载之前运行,因此as_view()失败。

答案 1 :(得分:0)

在urls.py中

您使用的是MyHomeLoginView,类的名称是MyHomeView