找不到带有参数'('',)'的'book-detail'。尝试了1种模式:['目录/书/(?P <pk> [0-9] +)$']

时间:2019-10-09 05:26:54

标签: python django heroku

在我最近的部署之前,我的网站在我的本地环境上运行良好,并且在heroku env上也运行良好。 两种环境下的代码都相同,我提到了与类似问题相关的所有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 /登台的代码,也相同。

代码: 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,即,对于登台环境以及ALLOWED_HOSTS上的本地主机和添加的主机设置DEBUG = False,本地和登台工作正常,但是prod抛出500错误:

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

  

参考Setting DEBUG = False causes 500 Error

     

如果我回滚到先前提交的代码,它将开始在此问题中引发高度错误

如果我直接在heroku上验证

  

HP @ HP-PC MINGW64〜/ git_projects / prod / django_local_library(master)   $ heroku运行python manage.py runserver-远程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.

即使登台日志也没有错误。

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

2 个答案:

答案 0 :(得分:0)

当我关注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.ecmsdjango.com/

答案 1 :(得分:-1)

我遇到了同样的问题。 除了表bookinstances中的内容之外,其他所有内容都很好。 不知何故,书本实例中有几行会引起误解,而这些行在桌簿上没有对应行…… 有没有书籍的书店实例,当视图试图获取数据时,for气泡没有任何东西,并且当代码:{%url'book-detail'bookinst.book.pk%}“ 试图做任何事情的逆向,所有的事情都会出错... 但是这里令人失望的是,这种错误应该由Django最好地解释。