2016-07-05 9 views
2

変数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 }} 

は機能しません。

答えて

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 
+0

感謝を行うことができますが、それはここで働いていない方法の例であるプロジェクトがカスタムですので、私はそれを考えます。しかし解決策を見つけるには、prepare_contextに 'context.update({ 'appuser':self.appuser、 })'を追加してください。おかしいです。 –

関連する問題