我正在使用 django 框架并尝试集成一个 paypal 支付网关。但是我收到了这个错误
build_attrs() got an unexpected keyword argument 'type'
Django 版本:1.11.11
Python版本:3.6.3
异常值:build_attrs() 得到了一个意外的关键字参数“type”
异常位置:/home/iuser/anaconda3/lib/python3.6/site-packages/paypal/standard/widgets.py in render, line 35
from django import forms
try:
from django.forms.utils import flatatt # Django 1.7 and later
except ImportError:
from django.forms.util import flatatt # earlier
from django.utils.safestring import mark_safe
from django.utils.encoding import force_text
class ValueHiddenInput(forms.HiddenInput):
"""
Widget that renders only if it has a value.
Used to remove unused fields from PayPal buttons.
"""
def render(self, name, value, attrs=None):
if value is None:
return u''
else:
return super(ValueHiddenInput, self).render(name, value, attrs)
class ReservedValueHiddenInput(ValueHiddenInput):
"""
Overrides the default name attribute of the form.
Used for the PayPal `return` field.
"""
def render(self, name, value, attrs=None):
if value is None:
value = ''
final_attrs = self.build_attrs(attrs, type=self.input_type)
if value != '':
final_attrs['value'] = force_text(value)
return mark_safe(u'<input%s />' % flatatt(final_attrs))
最佳答案
在django-1.11 build_attrs
函数已按照 release notes [Django-doc] 中的规定进行更改:
The signature of private API
Widget.build_attrs()
changed fromextra_attrs=None, **kwargs
tobase_attrs, extra_attrs=None
.
您需要将调用更改为:
class ReservedValueHiddenInput(ValueHiddenInput):
"""
Overrides the default name attribute of the form.
Used for the PayPal `return` field.
"""
def render(self, name, value, attrs=None):
if value is None:
value = ''
final_attrs = <b>self.build_attrs(attrs, {'type': self.input_type})</b>
if value != '':
final_attrs['value'] = force_text(value)
return mark_safe(u'<input%s />' % flatatt(final_attrs))
关于python - build_attrs() 得到了一个意外的关键字参数 'type',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136525/