【发布时间】: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中传递了
,但是没有在相应的函数(类)中使用,这是为什么呢?