Предаване на параметри към отменен изглед в Django/Allauth

С Django 1.4 и Allauth се опитвам да имам 2 различни страници за регистрация. Когато казвам различни, имам предвид 2 различни URL адреса и „html оформления“.

Ето какво направих досега. Той „работи“, но не предава променливата „is_alternate_template“ към HTML шаблона:


В urls.py:

url(r'^accounts/', include('allauth.urls')),
url(r'^abc/alternate-signup/?$','project.views.alternate_signup'),

в views.py:

def alternate_signup(request):
    from allauth.account import views as account_views
    is_alternate_template = True
    return account_views.signup(request, locals(), context_instance=RequestContext(request))

в templates/account/signup.html

{% if is_alternate_template %}
display the alternate layout of the signup page
{% else %}
display the 'standard' layout of the signup page
{% endif %}

В модула Allauth ето как изглежда изгледът за регистрация в акаунт/изгледи (това е изгледът, който отмених от модула Allauth, а не нещо, което написах сам):

class SignupView(RedirectAuthenticatedUserMixin, CloseableSignupMixin, FormView):
    template_name = "account/signup.html"
    form_class = SignupForm
    redirect_field_name = "next"
    success_url = None

    def get_success_url(self):
        # Explicitly passed ?next= URL takes precedence
        ret = (get_next_redirect_url(self.request,
                                     self.redirect_field_name)
               or self.success_url)
        return ret

    def form_valid(self, form):
        user = form.save(self.request)
        return complete_signup(self.request, user,
                               app_settings.EMAIL_VERIFICATION,
                               self.get_success_url())

    def get_context_data(self, **kwargs):
        form = kwargs['form']
        form.fields["email"].initial = self.request.session.get('account_verified_email', None)
        ret = super(SignupView, self).get_context_data(**kwargs)
        login_url = passthrough_next_redirect_url(self.request,
                                                  reverse("account_login"),
                                                  self.redirect_field_name)
        redirect_field_name = self.redirect_field_name
        redirect_field_value = self.request.REQUEST.get(redirect_field_name)
        ret.update({"login_url": login_url,
                    "redirect_field_name": redirect_field_name,
                    "redirect_field_value": redirect_field_value })
        return ret

signup = SignupView.as_view()

person mrmuggles    schedule 23.10.2015    source източник


Отговори (1)


Това, което трябва да направите, е да създадете подклас на SignupView във вашите изгледи.py може да бъде наистина просто.

class SignupViewExt(SignupView):

    template_name = "account/signup_alternate.html"

Да, толкова просто, защото шаблонът е единственото нещо, което трябва да промените. След това променете urls.py като

url(r'^abc/alternate-signup/?$',project.views.SignupViewExt.as_view()),

ако искате да подадете допълнителни параметри:

url(r'^abc/alternate-signup/?$',project.views.SignupViewExt.as_view(param='some value')),

които след това ще бъдат достъпни за SignupViewExt като self.param.

person e4c5    schedule 23.10.2015
comment
Благодаря, това работи! Някаква идея как все още мога да предам променливи към този нов шаблон? (някой основен шаблон, който трябва да разширя, използва променливи, за да показва или не странични ленти) - person mrmuggles; 23.10.2015
comment
Получавам SignupViewExt.as_view получи невалидна ключова дума „param“ - person mrmuggles; 23.10.2015
comment
Добре, направих го с помощта на този SO въпрос: stackoverflow.com/questions/11588743/ Чрез добавяне на def get_context_data(self, **kwargs): context = super(SignupViewExt, self).get_context_data( **kwargs) context['my_param'] = 'моята стойност' върне контекст - person mrmuggles; 23.10.2015