Django TypeError:render()得到了意外的关键字参数'renderer'

时间:2018-08-27 12:43:47

标签: django

我已经升级到Django 2.1,并且在加载管理界面时看到此错误:

TypeError at /admin/foo/bar/1/change/

render() got an unexpected keyword argument 'renderer'

4 个答案:

答案 0 :(得分:25)

几乎可以肯定是因为这个向后不兼容的change in Django 2.1

  
      
  • 已删除对不带Widget.render()参数的renderer方法的支持。
  •   

您可能在代码中或其中一个依赖项的代码中将django.forms.widgets.Widget子类化。代码可能看起来像这样:

from django.forms import widgets

class ExampleWidget(widgets.Widget):
    def render(self, name, value, attrs=None):
        # ...

您需要修复render的方法签名,以使其看起来像这样:

    def render(self, name, value, attrs=None, renderer=None):

如果要检查,请查看the source code of widgets.Widget

答案 1 :(得分:0)

如本文所述

https://docs.djangoproject.com/en/2.1/releases/2.1/#features-removed-in-2-1

对不带renderer参数的Widget.render()方法的支持被删除。

所以我自己通过注释掉返回的和非预期的renderer参数解决了这个问题。

# renderer=self.form.renderer

如何解决: 为此,我导航到位于下面指定的目录路径中的名为boundfield.py的模块(注意:您的目录路径肯定与我的不同),并修改了BoundField类下定义的as_widget方法。

注释(#)或删除渲染器参数的行。

/home/codemask/Documents/DjangoProjects/BlogApp/venv/lib/python3.7/site-packages/django/forms/boundfield.py

下面是修改的屏幕截图,我在下面加了下划线,供您查看: The underlined code is my solution

答案 2 :(得分:-1)

其版本和签名不兼容问题。 返回版本-2.0.8

pip3 install Django == 2.0.8

答案 3 :(得分:-1)

Django正在寻找可以在settings.py

中设置的默认渲染器
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'