【发布时间】: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
LoanedBooksAllListView和bookinstance_list_borrowed_all.html的代码已添加,我之前包含的较早