【问题标题】:Struggling to understand a django class based view code努力理解基于 django 类的视图代码
【发布时间】:2015-07-27 23:27:06
【问题描述】:

当我遇到一个我无法真正理解的代码时,我正在阅读 django 基于类的视图的文档。如果有人可以解释“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})

“initial”是什么意思?以及 get 函数对这段代码有何贡献?

【问题讨论】:

    标签: python django django-views django-class-based-views


    【解决方案1】:

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

    类变量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 的文档,以了解初始值和默认值之间的区别。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 所以它的工作方式有点像 else?如果表单是有效的返回......否则它会从初始请求数据,它是如何工作的?
      • 当针对该视图的关联 url 发送 GET 请求时,它使用 get 方法。提交表单时,通常您正在执行 POST,这将使用 post 方法。 post 方法检查表单是否有效。
      猜你喜欢
      • 2018-05-08
      • 1970-01-01
      • 2021-02-23
      • 2011-12-30
      • 2014-01-22
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多