_reverse_with_prefix() * 之后的参数必须是可迭代的,而不是 int

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

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

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

...
...

this 评论中所述,在 args 元组末尾放置一个逗号可以修复它。

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

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

或者,如 docs 中所述,使用列表也可以:

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

您也可以尝试使用kwargs={'pk':models_saving_variable.pk}

最终代码为:

return HttpResponseRedirect(reverse('app_name:view_name', kwargs={'pk': saving_variable.pk}))