django template中对form变量迭代的代码解析

django Form类

django框架在编写template模板时,通过操作form变量来获取后端代码整合的表单对象内容,后端使用的就是django提供的Form类 ( 官方表单使用教学)。

template form iter

下图为个人项目中对form的应用示例:
template中对form迭代的示例

template中的form变量怎么来的

后端FormView类通过form_class变量将表单类向上传递

form django.views.generic.edit import FormView

# FormView使用样例,form_class赋值方式
class FormViewObject(FormView):
	....
	form_class = FormObject  # 组装好的Form类
	....
# 本次关注的部分源代码,FormMixin为FormView的父类
# 通过调用该类的get_context_data方法初始化Form类(请求为get方式时,调用get_context_data方法)
class FormMixin(ContextMixin)

	def get_form_class(self):
		return self.form_class
	
	def get_form(self, form_class=None):
		if form_class is None:
			form_class = self.get_form_class()
		return form_class(**self.get_form_kwargs())
	
	def get_context_data(self, **kwargs):
		if 'form' not in kwargs:
			kwargs['form'] = self.get_form()
		return super().get_context_data(**kwargs)

Form类的迭代器

Form通过定义__iter__内置函数来实现迭代器,在Form类或其父类中找到该函数即可

class Form(BaseForm, metaclass=DeclarativeFieldsMetaClass):
	...

@html_safe
class BaseForm
	...
	def __iter__(self):
		for name in self.fields:
			yield self[name]

总结

template对form的迭代结果就是拿出Form类中组装的Field类对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值