如何在使用 id 作为参数的反向时解决 django 中的 NoReverseMatch?

因此,我大概是因为传递的 id 值大于 9 而得到了 NoReverseMatch。


这是我收到的错误消息:


Reverse for 'article-details' with arguments '('2', '9')' not found. 1 pattern(s) tried: ['a/(?P<pk>[0-9]+)$']

这是我的代码:


Models.py


class Post( models.Model):

title = models.CharField( max_length = 250 )

author = models.ForeignKey( User , on_delete=models.CASCADE )

body = models.TextField()


def get_absolute_url(self):

    print((self.id))

    return reverse('article-details' , args= str(self.id))

urls.py


urlpatterns = [

path ( 'a/<int:pk>' ,  ArticleDetailView.as_view() , name='article-details' ) ,

path('create/' , CreatePost2.as_view() , name='create_post' ) ,

path ( 'p/<int:pk>' ,  postDetails , name= 'post-details' ) ,

]


我认为,由于每当使用 id > 9 调用反向时,数据库中都会有超过 10 个条目,因此它会将其解释为具有 2 个值的对。


我该如何解决这个问题?


慕码人2483693
浏览 85回答 1
1回答

德玛西亚99

Args 像元组一样接受可迭代对象。但字符串也是可迭代的,因此如果您传递单个字符串'29',它会将其解释为两个参数2和9。您应该将self.id(或者可能更好self.pk)包装在一个单例元组中:def&nbsp;get_absolute_url(self):&nbsp; &nbsp;&nbsp;&nbsp;return&nbsp;reverse('article-details'&nbsp;,&nbsp;args=(self.pk,))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python