努力理解基于 django class 的视图代码

Struggling to understand a django class based view code

我在阅读基于 django class 的视图 的文档时遇到了一段我无法真正理解的代码。如果有人可以解释“get”部分,那将非常有帮助。

这里是查看代码

from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.views.generic import View

from .forms import MyForm

class MyFormView(View):
    form_class = MyForm
    initial = {'key': 'value'}
    template_name = 'form_template.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            # <process form cleaned data>
            return HttpResponseRedirect('/success/')

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

什么是“初始”? get 函数如何为这段代码做出贡献?

initial = {'key': 'value'} 是为表单设置一些默认值的地方。 self.form_class(initial=self.initial) 当有 GET 请求时,使用这些默认值来填写表单。

get函数渲染表单,即生成HTML表单。当给定 initial values 的字典时,即使在第一次访问时,表单也已经填满了——初始值。否则它将是空的。

class 变量 initial 只是存储初始值,因此它们可以被 get 函数使用。您 可以 将变量也放在 get 方法中或完全忽略它:

def get(self, request, *args, **kwargs):
    form = self.form_class(initial={'key': 'value'})
    return render(request, self.template_name, {'form': form})

(虽然不会这样做,因为初始值会稍微不那么明显,但它们确实很重要。)

此外,请查看有关 bound and unbound forms 的文档,了解初始值和默认值之间的区别。