Django注册基于类的视图,具有不同的模板和参数

时间:2013-11-08 19:24:56

标签: python django

django-registration passing extra_context to Registration Form之后,我可以向django-registration注册表发送额外的上下文,但不能向django-registration的其他页面发送,例如registration_success页面和activation_complete页面。

我想要做的就是将一个参数传递给每个django-registration以告诉他们如何显示。但是如何做到这一点对我来说似乎并不清楚。

目前这是urls.py的一部分:

(r'^accounts/login/$', 'django.contrib.auth.views.login', { 'extra_context' :     {'design_form': True }}),
(r'^accounts/register/complete/$', OneBoxView.as_view()),
(r'^accounts/register/$', MyRegistrationView.as_view(form_class=RegistrationForm)),
(r'^accounts/', include('registration.backends.default.urls')),

因此,例如,注册/完整页面使用基于OneBoxView分类的视图,如下所示:

class OneBoxView(TemplateView):
    template_name = 'registration/registration_complete.html'
    def get_context_data(self, **kwargs):
            context = super(OneBoxView, self).get_context_data(**kwargs)
            context.update({
                'design_onebox': True,
            })

但是这个视图函数有一个模板,我找不到如何让各个django-registration页面将模板传递给类。设置基于类的视图意味着源代码(direct_to_template, {'template': 'registration/registration_complete.html'},)无法工作。

我不想为每个网址编写单独的视图函数,并且编写一个大的“if”函数或% self.kwargs['template']来获取页面的名称似乎也是不优雅的。 django-registration的大多数页面必须有一些优雅的方式才能简单地传递“design_onebox”参数?

1 个答案:

答案 0 :(得分:2)

变量模板名称可以通过两种方式传递给TemplateView类:

  • 重新定义get_template_names方法
  

返回要用于请求的模板名称列表。必须返回一个列表。如果覆盖了render_to_response,则无法调用。

  • 将template_name传递给as_view方法:
TemplateView.as_view(template_name='some_template_name')

最后一个选项是覆盖get_success_url类的RegistrationView方法,默认情况下只是(省略docstring)

def get_success_url(self, request, user):
    return ('registration_complete', (), {})

但是根据你的问题,我无法猜测template_name必须通过哪里。