gpt4 book ai didi

python - 如何使用基于类的 View 更改传递给模板的表单的键

转载 作者:行者123 更新时间:2023-12-01 04:54:55 25 4
gpt4 key购买 nike

我有一个引用类似 {{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。

Python 2.7:

返回 super(MyClassView, self).render_to_response(context, **response_kwargs)

Python 3:

返回 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com