【问题标题】:Reverse for 'book-detail' with arguments '('',)' not found. 1 pattern(s) tried: ['catalog/book/(?P<pk>[0-9]+)$']未找到带有参数 '('',)' 的 'book-detail' 的反向操作。尝试了 1 种模式:['catalog/book/(?P<pk>[0-9]+)$']
【发布时间】:2020-02-06 09:40:51
【问题描述】:

在我最近的部署之前,我的网站在我的本地环境中运行良好,并且在 heroku 环境中运行良好。 两种环境的代码都是相同的,我参考了与类似问题相关的所有 11 个帖子,例如 Reverse for 'todo-user' with arguments '('',)' not found. 1 pattern(s) tried

我的问题看起来与我在此处的其他帖子中看到的不同,我认为它与环境设置/变量有关,我还无法识别它。 但是堆栈溢出提供的解决方案让我觉得这个问题的真正问题是别的。

当我尝试点击 http://127.0.0.1:8000/catalog/mybooks/ 链接时,本地网站工作正常,但是,生产(heroku),相同的代码引发以下异常


NoReverseMatch at /catalog/mybooks/
Reverse for 'book-detail' with arguments '('',)' not found. 1 pattern(s) tried: ['catalog/book/(?P<pk>[0-9]+)$']
Request Method: GET
Request URL:    https://<myapp>.herokuapp.com/catalog/mybooks/
Django Version: 2.2.5
Exception Type: NoReverseMatch
Exception Value:    
 Reverse for 'book-detail' with arguments '('',)' not found. 1 pattern(s) tried: ['catalog/book/(?P<pk>[0-9]+)$']
 Exception Location:    /app/.heroku/python/lib/python3.7/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 673
 Python Executable: /app/.heroku/python/bin/python
 Python Version:    3.7.3
 Python Path:   
['/app/.heroku/python/bin',
 '/app',
 '/app/.heroku/python/lib/python37.zip',
 '/app/.heroku/python/lib/python3.7',
 '/app/.heroku/python/lib/python3.7/lib-dynload',
 '/app/.heroku/python/lib/python3.7/site-packages']
 Server time:   Wed, 9 Oct 2019 04:52:47 +0000
 Error during template rendering
 In template /app/catalog/templates/base_generic.html, error at line 7
 Reverse for 'book-detail' with arguments '('',)' not found. 1 pattern(s) tried: ['catalog/book/(?P<pk>[0-9]+)$']

这对我来说似乎是一个误导性错误。

另外,因为代码在我的本地上按预期工作(即,向我显示所有数据),所以它看起来不像是编码问题,所以我无法理解这里的实际问题(并提供了解决方案其他类似问题)


我已经应用了所有迁移,所以环境看起来还不错:

$ heroku run python manage.py migrate --remote heroku-prod
 Running python manage.py migrate on <my app>... starting, run.5216 (Free)
 Running python manage.py migrate on <my app>... connecting, run.5216 (Free)
 Running python manage.py migrate on <my app>... up, run.5216 (Free)
 Operations to perform:
  Apply all migrations: admin, auth, catalog, contenttypes, sessions, social_django
 Running migrations:
  No migrations to apply.

HP@HP-PC MINGW64 ~/git_projects/prod/django_local_library (master)

DEV/staging 上的代码,也是一样的。

代码: urls.py 获取与书籍相关的链接

urlpatterns = [
    path('books/', views.BookListView.as_view(), name='books'),
    path('book/<int:pk>', views.BookDetailView.as_view(), name='book-detail'),
    path('mybooks/', views.LoanedBooksByUserListView.as_view(), name='my-borrowed'),
]

views.py

class BookDetailView(LoginRequiredMixin, generic.DetailView):
    model = Book

    def get_context_data(self, **kwargs):
        context = super(BookDetailView, self).get_context_data(**kwargs)
        process_data(self.request)
        return context

class LoanedBooksByUserListView(LoginRequiredMixin, generic.ListView):
    """Generic class-based view listing books on loan to current user. """
    model = BookInstance
    template_name = 'catalog/bookinstance_list_borrowed_user.html'

    def get_queryset(self):
        return BookInstance.objects.filter(borrower=self.request.user).filter(status__exact='o').order_by('due_back')

    def get_context_data(self, **kwargs):
        context = super(LoanedBooksByUserListView, self).get_context_data(**kwargs)
        process_data(self.request)
        return context

模板

{% for bookinst in bookinstance_list %}
      <li class="{% if bookinst.is_overdue %}text-danger{% endif %}">
        <a href="{% url 'book-detail' bookinst.book.pk %}">{{bookinst.book.title}}</a> ({{ bookinst.due_back }})
      </li>
      {% endfor %}

昨天晚上,在这篇文章之后,出于安全目的,我关闭了 DEBUG,即设置 DEBUG=False 用于暂存环境,以及本地和添加的主机在 ALLOWED_HOSTS 上,本地和暂存工作正常,但是 prod 抛出 500 错误:

仅供参考:staging 和 prod 具有相同的配置,除了主机名

参考Setting DEBUG = False causes 500 Error

如果我回滚到之前提交的代码,它会开始抛出此问题中突出显示的错误

如果我直接在 heroku 上验证

HP@HP-PC MINGW64 ~/git_projects/prod/django_local_library(主) $ heroku run python manage.py runserver --remote heroku-prod

它不会抛出任何异常:

Performing system checks...
System check identified no issues (0 silenced).
October 09, 2019 - 21:18:54
Django version 2.2.5, using settings 'locallibrary.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

甚至暂存日志也没有错误。

如果有人遇到过此类问题,请帮助我。

【问题讨论】:

  • 请也发布您的代码。
  • 提供代码以便我们提供帮助,特别是您的 urls.py 和相关函数
  • @Rarblack,harshit-verma:谢谢,我添加了一些代码和更多分析
  • @harshitverma:谢谢,我添加了一些代码和更多分析,请看看您是否可以提供帮助
  • 我可以看到你在你的url中传递了,但是没有在相应的函数(类)中使用,这是为什么呢?

标签: python django heroku


【解决方案1】:

当我关注 What is a NoReverseMatch error, and how do I fix it?NoReverseMatch django - not a valid view function or pattern 时,我的问题得到了解决

而且我认为所有此类/类似的问题都应该指向上述链接。

根本原因: 数据已损坏,我删除了损坏的数据,并在未更改代码的情况下修复了问题。

步骤: 我最近添加的另一个新页面遇到了类似的问题,但根本原因不同(这是由于形成的 url 不正确),上面的链接帮助我确定了这个问题的真正原因。我仔细查看了细节,包括形成的 url 和引用 url 的页面,最后是数据。 而网站目前看起来是这样的https://www.realityseekers.com/

【讨论】:

    【解决方案2】:

    对我来说同样的问题。 除了表 bookinstances 中的内容外,其他一切都很好。 不知何故,bookinstances 中有几行具有误导性,而且这些行没有对应表中的书行... 有没有书的bookinstances,当视图试图获取数据时,for bucle什么也没有,当代码:{% url 'book-detail' bookinst.book.pk %}" 试图做任何事的相反,所有的事情都出错了...... 但这里令人失望的是,这种错误最好由 Django 来解释。

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 2020-04-17
      • 2021-06-13
      • 2017-11-05
      • 2019-09-07
      • 2020-08-16
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多