3

I want to pass variable appuser to template and I don't understand how to do it. I have tried to use kwargs.update but it still doesn't work.

I have a view:

class CausesView(AjaxFormView):
    appuser = None
    causes = []
    cause_allocation_set = None

    def prepare_request(self, request, *args, **kwargs):
        self.causes = Cause.objects.filter(is_main_cause = True)
        self.appuser = AppUser.get_login_user(request)
        self.cause_allocation_set = set([r.cause_id for r in self.appuser.current_cause_save_point.cause_allocations_list])

    def prepare_context(self, request, context, initial):
        initial.update(
            causes = self.cause_allocation_set,
            appuser = self.appuser,
            )

    def prepare_form(self, request, form):
        form._set_choices("causes", [(r.id, r.title) for r in self.causes])

    def custom_context_data(self, request, **kwargs):
        kwargs.update(
            special_test = "dsf"
        )
        return kwargs

    def process_form(self, request, form):
        data = form.cleaned_data

        try:
            with transaction.atomic():
                if self.cause_allocation_set != set(data.get('causes')):
                    self.appuser.save_causes(data.get('causes'))
        except Exception as e:
            message = "There was an error with saving the data: " + str(e.args)
            return AjaxErrorResponse({'title':"Error", 'message':message})
        return AjaxSuccessResponse('Causes Saved')

And I have a form:

class CauseForm(AjaxForm):
    causes = forms.TypedMultipleChoiceField(label="Select Causes", choices = (), required = False, coerce = int,
                    widget = forms.CheckboxSelectMultiple())

    def clean(self):
        cleaned_data = super(CauseForm, self).clean()
        causes = cleaned_data.get('causes')

        validation_errors = []
        if not causes is None and not len(causes):
            validation_errors.append(forms.ValidationError("At least one Cause is required"))

        if len(validation_errors):
            raise forms.ValidationError(validation_errors)
        return cleaned_data

How can I get variable appuser in temlpate? For example:

{{ appuser.name }}

doesn't work.

Alex Pavlov
  • 571
  • 1
  • 7
  • 24

1 Answers1

3

Read How to use get_context_data in django and https://docs.djangoproject.com/en/1.9/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.get_context_data

Here is example of how you can do this

class CausesView(AjaxFormView):
    ...
    def get_context_data(self, **kwargs):
        context_data = super(CausesView, self).get_context_data(**kwargs)
        context_data['appuser'] = self.appuser
        return context_data
Community
  • 1
  • 1
Sardorbek Imomaliev
  • 14,861
  • 2
  • 51
  • 63
  • Thanks, but it doesn't work here, I think it because the project is custom. But I find a solution, just add `context.update({ 'appuser': self.appuser, })` to prepare_context. It's strange. – Alex Pavlov Jul 05 '16 at 08:24