在我最近的部署之前,我的网站在我的本地环境上运行良好,并且在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.
即使登台日志也没有错误。
如果有人遇到过此类问题,请帮助我。
答案 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最好地解释。