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

时间:2018-09-30 06:57:14

标签: django django-views django-urls

我过去曾多次使用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>')

...
...

2 个答案:

答案 0 :(得分:1)

this注释中所述,将逗号放在args元组的末尾即可解决该问题。

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

(如this SO answer中所述,单项元组必须使用逗号逗号来消除定义元组或括号中的表达式的歧义)

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

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

答案 1 :(得分:0)

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

最终代码为:

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