我有一个引用类似 {{registeredteamform.team_name}} 的表单的模板,但 Django 的基于通用类的 View 使用键“form”传递表单。我不想更改模板中的表单名称(我正在处理多表单情况),而是想更改传递给模板的表单的键。
我尝试像这样扩展 render_to_response
方法
def render_to_response(self, context, **response_kwargs):
response_kwargs['registeredteamform'] = context['form']
return super().render_to_response(self, context, **response_kwargs)
但这会引发错误 render_to_response() 采用 2 个位置参数,但给出了 3 个
。那么,如何更改表单键,render_to_response 是执行此操作的适当位置吗? (我正在对 CreateView
进行子类化),
最佳答案
您收到的错误是由于您使用 super 的方式造成的。对于 Python 2.7,self
位于 super()
中,对于 Python 3,您根本不需要传递 self。
返回 super(MyClassView, self).render_to_response(context, **response_kwargs)
返回 super().render_to_response(context, **response_kwargs)
如果您深入研究CreateView
,您会发现表单实际上是在get()
中分配给form
键的.
def get(self, request, *args, **kwargs):
"""
Handles GET requests and instantiates a blank version of the form.
"""
form_class = self.get_form_class()
form = self.get_form(form_class)
return self.render_to_response(self.get_context_data(form=form))
您可以按照现在的方式添加键,但 form
键仍会被分配。
我可能建议重写get()
。
def get(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
return self.render_to_response(self.get_context_data(registeredteamform =form))
关于python - 如何使用基于类的 View 更改传递给模板的表单的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27651993/