Реверс для 'book-detail' с аргументами '(' ',)' не найден. Попробован 1 шаблон (ов): ['каталог / книга / (? P <pk>[0-9] +) $'] - PullRequest
0 голосов
/ 09 октября 2019

Мой веб-сайт хорошо работает в моей локальной среде, а также хорошо работал в среде heroku до моего недавнего развертывания. Код одинаков в обеих средах, и я сослался на все 11 постов, связанных с похожей проблемой, пример Обратное для 'todo-user' с аргументами '(' ',)' не найдено. 1 шаблон (ов) пробовал

Моя проблема выглядит иначе, чем я видел в других постах здесь, я думаю, что она связана с настройками / переменными среды, которые я пока не могу определить. Но решения, предоставляемые при переполнении стека, заставляют меня думать, что настоящая проблема этой проблемы - что-то еще.

Когда я пытаюсь нажать на ссылку 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 для постановки env, а такжеr локальный и добавленный хост в ALLOWED_HOSTS, локальный и промежуточный работают нормально, однако prod выдает ошибку 500:

FYI: staging и prod имеют одинаковые конфигурации, кроме имени хоста

Ссылка Настройка DEBUG = Ложные причины 500 Ошибка

Если я выполню откат до предыдущего подтвержденного кода, он начнет выдавать ошибку, выделенную в этом задании

Иесли я проверю непосредственно на heroku

HP @ HP-PC MINGW64 ~ / git_projects / prod / django_local_library (master) $ heroku запустить 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.

Даже в журналах подготовки нет ошибок.

Пожалуйста, помогите мне, если кто-нибудь когда-либо сталкивался с такой проблемой.

1 Ответ

0 голосов
/ 21 октября 2019

Решение моей проблемы было исправлено, когда я следовал Что такое ошибка NoReverseMatch и как ее исправить?

И я думаю, что все такие / похожие проблемы должны указывать на вышеприведенноессылка.

Основная причина: Данные были повреждены, я удалил поврежденные данные, и проблема была исправлена ​​без каких-либо изменений в коде.

Шаги: Я столкнулся с аналогичной проблемой для другой новой страницы, которую я недавно добавил, но основная причина была другой (это было связано с неправильным созданным URL-адресом), и приведенная выше ссылка помогла мне определить истинную причину этой проблемы. Я тщательно изучил детали, включая сформированный URL-адрес и страницу, с которой был направлен URL-адрес, и, наконец, данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...