【问题标题】:NoReverseMatch at //, Reverse for ' ' not found. ' ' is not a valid view function or pattern nameNoReverseMatch at //,未找到“”的反向。 “ ”不是有效的视图函数或模式名称
【发布时间】:2019-05-19 19:27:53
【问题描述】:

NoReverseMatch at //,未找到“”的反向。 “ ”不是有效的视图函数或模式名称。

作为 Django 开发下的 Mozilla 开发挑战的一部分,该站点的其余部分工作正常,但是当尝试访问借阅书籍并以所需权限“可以标记返回”的图书管理员身份登录的页面时,我收到上述错误

View.py

class LoanedBooksAllListView(PermissionRequiredMixin, generic.ListView):
"""Generic class-based view listing all books on loan. Only visible to users with can_mark_returned permission."""
model = BookInstance
permission_required = 'catalog.can_mark_returned'
template_name = 'catalog/bookinstance_list_borrowed_all.html'
paginate_by = 10

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

模板

 {% if user.is_staff %}
  {% if perms.catalog.can_mark_returned %}
  <li class="nav-item active"><a class="nav-link" href="{% url 'all-borrowed' %}">All Books</a></li>
  {% endif %}
  {% endif %}

应用 urls.py

urlpatterns += [
path('mybooks/', views.LoanedBooksByUserListView.as_view(), name='my-borrowed'),
path(r'borrowed/', views.LoanedBooksAllListView.as_view(), name='all-borrowed'),

]

追溯

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/catalog/borrowed/

Django Version: 2.1.3
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'catalog.apps.CatalogConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template E:\MDN\django_projects\localibrary\catalog\templates\base_generic.html, error at line 8
   Reverse for 'renew-book-librarian' not found. 'renew-book-librarian' is not a valid view function or pattern name.
   1 : <!DOCTYPE html>
   2 : <html lang="en">
   3 : <head>
   4 :   {% block title %}<title>Local Library</title>{% endblock %}
   5 :   <meta charset="utf-8">
   6 :   <meta name="viewport" content="width=device-width, initial-scale=1">
   7 :   <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
   8 :   <link rel="stylesheet" href="https://use.fontawesome.c om/releases/v5.5.0/css/all.css" integrity="s ha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
   9 :   <link href="https://fonts.googleapis.com/css?family=Pridi:400,500,600" rel="stylesheet">
   10 :   <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
   11 :   <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
   12 :   <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
   13 :   <!-- Add additional CSS in static file -->
   14 :   {% load static %}
   15 :   <link rel="stylesheet" type="text/css" href="{% static '../static/css/styles.css' %}">
   16 : </head>
   17 : <body>
   18 : <section class="top">


Traceback:

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\core\handlers\base.py" in _get_response
  156.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\core\handlers\base.py" in _get_response
  154.                 response = response.render()

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\response.py" in render
  106.             self.content = self.rendered_content

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\backends\django.py" in render
  61.             return self.template.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render
  171.                     return self._render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\defaulttags.py" in render
  309.                 return nodelist.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\defaulttags.py" in render
  309.                 return nodelist.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\template\defaulttags.py" in render
  442.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\urls\base.py" in reverse
  90.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))

File "C:\Users\JOACHI~1\Envs\joka\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
  622.         raise NoReverseMatch(msg)

Exception Type: NoReverseMatch at /catalog/borrowed/
Exception Value: Reverse for 'renew-book-librarian' not found. 'renew-book-librarian' is not a valid view function or pattern name.

bookinstance_list_borrowed_all

<h1>All Borrowed Books</h1>

{% if bookinstance_list %}
<ul>

  {% 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 }}) {% if user.is_staff %}- {{ bookinst.borrower }}{% endif %} {% if perms.catalog.can_mark_returned %}- <a href="{% url 'renew-book-librarian' bookinst.id %}">Renew</a>  {% endif %}
  </li>
  {% endfor %}
</ul>

{% else %}
  <p>There are no books borrowed.</p>
{% endif %}

提前致谢!

【问题讨论】:

  • 请从LoanedBooksAllListView视图添加代码。
  • 您的回溯在base_generic.html 中显示错误。该错误似乎表明您有 {% url 'renew-book-librarian' %},但您没有显示任何具有该名称的 URL 模式 - 您只显示了 `name='my-borrowed'` 和 name='all-borrowed'。您发布的模板不包含{% url 'renew-book-librarian' %},因此请确保您已保存所有更改并重新启动runserver,以确保您正在运行您认为的代码。
  • 你能显示哪个模板有给出这个错误的代码吗?
  • 请添加模板bookinstance_list_borrowed_all.html
  • @SergeyPugach LoanedBooksAllListViewbookinstance_list_borrowed_all.html 的代码已添加,我之前包含的较早

标签: python django pycharm


【解决方案1】:

&lt;a href="{% url 'renew-book-librarian' bookinst.id %}Renew&lt;/a&gt; "

这就是问题所在。你没有反向名称'renew-book-librarian'。

为了解决这个问题,您需要添加具有此类反向名称的视图:

urlpatterns += [
    path('mybooks/', views.LoanedBooksByUserListView.as_view(), name='my-borrowed'),
    path(r'borrowed/', views.LoanedBooksAllListView.as_view(), name='all-borrowed'),
    # add this one
    path(r'borrowed/<int:bookinst_id>', views.LoanedBooksDetailView.as_view(), name='renew-book-librarian'),
]

并添加LoanedBooksDetailView 视图。

或者将url 更改为另一个视图或#,而您没有正确的网址但希望使用空网址来实现,例如:

 <a href="#">Renew</a>

【讨论】:

  • 非常感谢兄弟!工作就像一个魅力,作为我现在培训的一部分,我刚刚在接下来的教程中添加了#,我将学习如何使用表单来实现它!
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 2019-06-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
相关资源
最近更新 更多