2017-08-19 60 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

谢谢!我知道了。 –