首页 文章

如何使用基于类的视图更改传递给模板的表单的键

提问于
浏览
1

我有一个模板引用像{}这样的表单,但Django 's generic class based views pass forms using the key '表单'. Rather than changing the form name in my template (I' m处理多表单情况)我想更改传递给模板的表单的键 .

我尝试像这样扩展 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() takes 2 positional arguments but 3 were given . 那么,我如何更改表单键并且render_to_response是否适合这样做呢? (我正在继承 CreateView ),

1 回答

  • 2

    你得到的错误是因为你使用super的方式 . self 用于Python 2.7的 super() ,你根本不需要为Python 3传递self .

    Python 2.7:

    return super(MyClassView, self).render_to_response(context, **response_kwargs)

    Python 3:

    return 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))
    

相关问题