【问题标题】:_reverse_with_prefix() argument after * must be an iterable, not int* 之后的 _reverse_with_prefix() 参数必须是可迭代的,而不是 int
【发布时间】:2019-03-05 15:17:20
【问题描述】:

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

...
...

【问题讨论】:

    标签: django django-views django-urls


    【解决方案1】:

    正如this 评论中提到的,在 args 元组末尾加一个逗号可以解决这个问题。

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

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

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

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

    【讨论】:

    • 但是,为什么这是必要的? (这两个链接都没有真正解释原因。)
    • @JasonGabler 好问题。它需要有资格作为一个元组。我现在已经用这一点更新了答案。
    【解决方案2】:

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

    最终代码为:

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

    【讨论】:

      猜你喜欢
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      相关资源
      最近更新 更多