Django的。将变量从视图传递到模板

时间:2016-07-05 06:12:28

标签: django django-forms django-templates django-views

我想将变量appuser传递给模板,但我不明白该怎么做。 我曾尝试使用kwargs.update,但它仍然无效。

我有一个观点:

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')

我有一张表格:

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

如何在temlpate中获取变量appuser? 例如:

{{ appuser.name }}

不起作用。

1 个答案:

答案 0 :(得分:2)

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

以下是如何执行此操作的示例

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