【问题标题】:NoReverseMatch django - not a valid view function or patternNoReverseMatch django - 不是有效的视图函数或模式
【发布时间】:2017-06-25 23:45:55
【问题描述】:

当前使用 Django 1.11。我得到一个例外

Reverse for 'book_details' not found. 'book_details' is not a valid view function or pattern name.
Request Method: GET
Request URL:    http://localhost:8000/library/book/c7311ecf-eba7-4e9d-8b1a-8ba4e075245a/
Django Version: 1.11
Exception Type: NoReverseMatch

我想在详细信息页面中使用我的模型中的get_absolute_url 转到更新页面。当我取出对 .id 的引用并使用 get_absolute_url 时。我检查了名称“book_details”是否被正确引用。我可以转到该页面并正确呈现书籍详细信息。在 Django 的管理控制台中,“现场查看”按钮也没有正确呈现它显示这个 localhost:8000/admin/r/13/c7311ecf-eba7-4e9d-8b1a-8ba4e075245a/ 所以它没有得到库/书籍也可以

当前 <a href =" {{ book.id }}/update">Update</a>

想要的 <a href =" {{ book.get_absolute_url }}/update">Update</a>

我在哪里打错了导致此功能不起作用?


文件中的设置:

是的,我确实将 UUID 作为主键。

views.py

class BookDetailsView(generic.DetailView):
"""
Generic class-based detail view for a Book.
"""
model = Book

urls.py

url(r'^book/(?P<pk>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$', views.BookDetailsView.as_view(), name='book_details'),
url(r'^book/(?P<pk>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/update/$', views.BookUpdate.as_view(), name='book_update'),

models.py

类书(models.Model):

def get_absolute_url(self):
    """Returns the URL of the book for details"""
    return reverse('book_details', args=[str(self.id)])

【问题讨论】:

  • 错误信息明确引用了'audition_details',但您向我们展示的代码中没有一个包含该字符串。我们无法解决我们看不到的问题。但是,请注意 &lt;a href="{{ foo }}/bar"&gt; 是代码异味。考虑使用the url tag,它提供了“一种在不违反 DRY 原则的情况下输出链接的方法,因为必须在模板中对 URL 进行硬编码”。
  • 感谢您对url 标签的建议。在找到在名称空间中调用 URL 的正确方法后,我将 /update 替换为正确的 URL 生成。

标签: python django


【解决方案1】:

尝试将pk 作为关键字参数提供给reverse 函数,

def get_absolute_url(self):
    return reverse('book_details', kwargs={ 'pk': str(self.id) })

另外,您在网址末尾缺少一个斜杠,

url(r'^book/(?P<pk>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/$', views.BookDetailsView.as_view(), name='book_details'),

【讨论】:

  • 感谢您的提示。这有帮助,但没有解决问题。我仔细查看了堆栈,发现回调正试图访问另一个应用程序中的 urls.py。将命名空间添加到调用后,它起作用了library:book_details 我找到了一些帮助我解决问题的参考资料source1source2
  • 我忘了提到命名空间,哥们,很高兴你自己想出来了。继续努力。
  • 我还缺少“命名空间”。解决了这个问题。谢谢!
猜你喜欢
  • 2018-11-29
  • 1970-01-01
  • 2019-04-21
  • 2019-08-13
  • 2019-05-19
  • 1970-01-01
  • 2020-03-13
  • 2021-08-02
  • 2019-06-01
相关资源
最近更新 更多