您的位置:

django出现TypeError("'%s' takes exactly %s %s (%s given)"% (self.__class__.__name__,self.arity,"argument" if self.arity == 1 else "arguments",len(expressions),))的解决方案

  发布时间:2023-03-21 07:24:36
Django的模板标签和过滤器都有一个"arity"属性,表示它们所需的参数个数。但是如果你的代码中有这样的调用这就是无效的,会抛出这个错误。解决这个错误的方法很简单:只需确保在使用模板标签或过滤器时,提供的参数个数与它们的"arity"属性匹配即可。举个例子,如果你的代码中有这样的调用那么你应该改成这样或者这样这样就可以解决这个错误。我们在调用它时没有提供任何参数,所以这是有效的过滤器的"arity"属性是1,表示它需要一个参数。

报错的原因

这个错误的原因是,你在使用Django的模板标签或过滤器时,提供了一个错误的参数个数。

Django的模板标签和过滤器都有一个"arity"属性,表示它们所需的参数个数。如果你在使用模板标签或过滤器时,提供的参数个数与"arity"属性不匹配,就会抛出这个错误。

举个例子,如果你的代码中有这样的调用:


{% if foo %}

那么这是有效的,不会抛出任何错误。但是如果你的代码中有这样的调用:


{% if foo bar %}

这就是无效的,会抛出"TypeError("'%s' takes exactly %s %s (%s given)"% (self.__class__.__name__,self.arity,"argument" if self.arity == 1 else "arguments",len(expressions),))"这个错误。

解决这个错误的方法很简单:只需确保在使用模板标签或过滤器时,提供的参数个数与它们的"arity"属性匹配即可。

如果你不确定某个模板标签或过滤器的"arity"属性是多少,可以查看Django文档中关于该标签或过滤器的说明。

如何解决

解决"TypeError("'%s' takes exactly %s %s (%s given)"% (self.__class__.__name__,self.arity,"argument" if self.arity == 1 else "arguments",len(expressions),))"这个错误的方法很简单:只需确保在使用模板标签或过滤器时,提供的参数个数与它们的"arity"属性匹配即可。

具体来说,你可以这样做:

1. 找到你的代码中调用模板标签或过滤器的地方。

2. 确保你在调用标签或过滤器时,提供了足够的参数。

3. 如果你不确定某个标签或过滤器的"arity"属性是多少,可以查看Django文档中关于该标签或过滤器的说明。

举个例子,如果你的代码中有这样的调用:


{% if foo bar %}

那么你应该改成这样:


{% if foo and bar %}

或者这样:


{% if foo %}
{% if bar %}

这样就可以解决"TypeError("'%s' takes exactly %s %s (%s given)"% (self.__class__.__name__,self.arity,"argument" if self.arity == 1 else "arguments",len(expressions),))"这个错误。

如果你还不确定如何使用模板标签或过滤器,可以查看Django文档中关于模板标签和过滤器的说明。

使用例子

当然有例子。

下面是一个使用模板标签或过滤器的示例:


{% for article in articles %}
    

{{ article.title|upper }}

{{ article.body|truncatewords:50 }}

{% endfor %}

在上面的例子中,我们使用了两个模板过滤器:`upper`和`truncatewords`。

- `upper`过滤器的"arity"属性是0,表示它不需要任何参数。我们在调用它时没有提供任何参数,所以这是有效的。

- `truncatewords`过滤器的"arity"属性是1,表示它需要一个参数。我们在调用它时提供了一个参数(50),所以这也是有效的。

如果你想了解更多关于如何使用模板标签和过滤器的信息,可以查看Django文档中关于模板标签和过滤器的说明。