1

django-registration 将 extra_context 传递给 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'},) 无法工作。

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

4

1 回答 1

2

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

  • 重新定义get_template_names方法

返回要用于请求的模板名称列表。必须返回一个列表。如果 render_to_response 被覆盖,则可能不会被调用。

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

最后一个选项是覆盖类的get_success_url方法,RegistrationView默认情况下很简单(省略文档字符串)

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

但是从您的问题中,我无法猜测template_name必须从哪里通过。

于 2013-11-08T19:43:52.817 回答