我试图在这里关注示例: 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
)。我错过了什么?
答案 0 :(得分:2)
在reverse
中使用reverse_lazy
代替as_view
。 <{1}}方法在网址完全加载之前运行,因此as_view()
失败。
答案 1 :(得分:0)
您使用的是MyHomeLoginView
,类的名称是MyHomeView
。