2017-08-19 101 views
0

我正在嘗試使用Book Django解鎖來學習Django。在第9章中,作者正在將表單顯示方法改寫爲基於類的視圖(CBV)。我想了解爲什麼在調用類屬性時使用了一組括號。我假設它是因爲類屬性將存儲一個表單對象,但我想進一步理解它。帶有括號的Django CVB屬性

from django.shortcuts import render, get_object_or_404, redirect 
from .models import Tag, Startup 
from .forms import TagForm 
from django.views.generic import View 

class PostCreate(View): 
    form_class = PostForm 
    template_name = 'blog/post_form.html' 

    def get(self, request): 
     return render(
      request, 
      self.template_name, 
      {'form': self.form_class()}) 

    def post(self, request): 
     bound_form = self.form_class(request.POST) 
     if bound_form.is_valid(): 
      new_post = bound_form.save() 
      return redirect(new_post) 
     else: 
      return render(
       request, 
       self.template_name,{'form': bound_form}) 

正如你可以看到,在14行的代碼是

{'form': self.form_class()}) 

但在最後一行,代碼

  self.template_name, 

我很困惑,爲什麼筆者對第一個類屬性使用括號而不是第二個。能否請您解釋一下,

謝謝

回答

1

我很困惑,爲什麼作者用第一類屬性括號而不是第二。你能解釋一下嗎?

get筆者使用self.form_class()即實際PostForm()因爲self.form_class僅僅是PostForm類的引用,所以當self.form_class用括號即self.form_class()它是PostForm不帶參數傳遞的實例。

post方法作者

被傳遞request.POSTself.form_class這又只是參照PostForm,所以現在它是PostForm(request.POST)並將其分配給變量bound_form,因此bound_form傳遞原樣。

希望這會消除你的困惑

+0

謝謝!我知道了。 –