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

标签 python django forms inheritance

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

相关文章:

python - Scrapy - 编码问题 - 抓取掉引号

python - 将此列表(如不带逗号的字符串)转换为列表

python - Django 1.7b4中继承BaseUser错误

python - 谷歌应用程序引擎(Python): Using multiple forms on a single web page

php - 如果 (!empty($_POST)) 不工作

python - Docker容器在运行flask应用程序后立即退出

javascript - 如何修复 Django 中的 "object() takes no parameters"错误

python - 如何在 <img src> 中添加 django 模板变量?

javascript - 在 Griddle 中使用自定义过滤器输入组件

Python:解析列表的列表