首页 > 解决方案 > * 之后的 _reverse_with_prefix() 参数必须是可迭代的,而不是 int

问题描述

我过去曾reverse多次使用 Django,但今天出现此错误,这似乎不够直观,无法调试:

TypeError: _reverse_with_prefix() argument after * must be an iterable, not int

这是我使用它的视图:

from django.urls import reverse

...
...
def show_scores_url(self, obj):
    scores_url = reverse('get_scores', args=(obj.pk))
    return format_html('<a href="' + scores_url + '">Scores</a>')

...
...

标签: djangodjango-viewsdjango-urls

解决方案


正如此评论中提到的,在 args 元组的末尾放置一个逗号可以修复它。

scores_url = reverse('get_scores', args=(obj.pk,))

(如this SO answer中所述,单项元组需要尾随逗号,以消除用括号括起来的表达式定义元组的歧义)

或者,如docs中所述,使用列表可以正常工作:

scores_url = reverse('get_scores', args=[obj.pk])

推荐阅读