首页 > 解决方案 > 未找到“”的反向。'' 不是我看不到的有效视图函数或模式名称错误

问题描述

Django 3 错误 - 找不到“”的反向。'' 不是有效的视图函数或模式名称。

让我发疯 - 我已经查看了 SO 上针对此类错误的所有其他解决方案,但没有一个适用。

谁能发现解决方案是什么?

base.html 的一部分

<li class="nav-item">
     <a class="nav-link" href="{% url 'item-shoppinglist' %}">Shopping List</a>
 </li>

购物清单模板

{% extends "base_generic.html" %}
{% block content %}
    {% if user.is_authenticated %}
            <h1>Shopping List</h1>
            {% if item_list %}
                <table class="table table-hover table-striped">
                    <thead class="thead-dark">
                        <tr>
                            <th scope="col">Item Name</th>
                            <th scope="col">Brought?</th>
                        </tr>
                    </thead>
                    <tbody>
                    {% for item in item_list %}

                        <tr >
                            <th scope="row"><a href="{{ item.get_absolute_url }}">{{ item.item_name}}</a></th>

                            <td><a href="{%  url '' item.id %}">Brought</a></td>
                        </tr>
                    {% endfor %}
                    </tbody>
                </table>
            {% else %}
                <p>There are no items on the shopping list</p>
            {% endif %}
    {% else %}
        <h2>Hey there stranger ... looks like you need to log in</h2>
    {% endif %}
{% endblock %}

风景

class ItemShoppingList(generic.TemplateView):
    model = Item
    template_name = 'kitchens/shoppinglist.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['item_list'] = Item.objects.filter(item_shoppinglist=1)
        return context

OP/urls.py

from django.contrib import admin
from django.urls import path
from django.urls import include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('kitchens/', include('kitchens.urls')),

]

#Add URL maps to redirect the base URL to our application
from django.views.generic import RedirectView
urlpatterns += [
    path('', RedirectView.as_view(url='/kitchens/', permanent=True)),
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

厨房/urls.py -

from django.urls import include, path

from . import views

urlpatterns = [
    path('', views.index, name='index'),

    path('location/', views.LocationListView.as_view(), name='location'),
    path('location/<int:pk>', views.LocationDetailView.as_view(), name='location-detail'),
    path('location/create/', views.LocationCreate.as_view(), name='location-create'),
    path('location/<int:pk>/update/', views.LocationUpdate.as_view(), name='location-update'),
    path('location/<int:pk>/delete/', views.LocationDelete.as_view(), name='location-delete'),

    path('shelf/', views.ShelfListView.as_view(), name='shelf'),
    path('shelf/<int:pk>', views.ShelfDetailView.as_view(), name='shelf-detail'),
    path('shelf/create/', views.ShelfCreate.as_view(), name='shelf-create'),
    path('shelf/<int:pk>/update/', views.ShelfUpdate.as_view(), name='shelf-update'),
    path('shelf/<int:pk>/delete/', views.ShelfDelete.as_view(), name='shelf-delete'),
    path('ajax/load-shelfs/', views.load_shelfs, name='ajax_load_shelfs'),  # <-- this one here

    path('item/', views.ItemListView.as_view(), name='item'),
    path('item/<int:pk>', views.ItemDetailView.as_view(), name='item-detail'),
    path('item/create/', views.ItemCreate.as_view(), name='item-create'),
    path('item/<int:pk>/update/', views.ItemUpdate.as_view(), name='item-update'),
    path('item/<int:pk>/delete/', views.ItemDelete.as_view(), name='item-delete'),
    path('item/<int:pk>/use/', views.ItemUseView.as_view(), name='item-use'),

    path('item/shoppinglist/', views.ItemShoppingList.as_view(), name='item-shoppinglist'),

    path('api/items/', views.ItemsListApiView.as_view(), name='list-create'),
    path('api/shelfs/', views.ShelfsListApiView.as_view(), name='list-create'),
    path('api/locations/', views.LocationsListApiView.as_view(), name='list-create'),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

追溯

Environment:


Request Method: GET
Request URL: http://1212121212<YES THIS MASKED>/kitchens/item/shoppinglist/

Django Version: 3.2.2
Python Version: 3.8.5
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'kitchens.apps.KitchensConfig',
 'rest_framework']
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',
 'whitenoise.middleware.WhiteNoiseMiddleware']


Template error:
In template /Users/geekpa/PycharmProjects/OP/kitchens/templates/base_generic.html, error at line 17
   Reverse for '' not found. '' is not a valid view function or pattern name.
   7 :     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css"
   8 :           integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
   9 :     <!-- Add additional CSS in static file add chagnes-->
   10 :     {% load static %}
   11 :     <link rel="stylesheet" href="{% static 'css/styles.css' %}">
   12 : </head>
   13 : 
   14 : <body>
   15 : <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
   16 :         integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
   17 :          crossorigin="a nonymous"></script>
   18 : <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
   19 :         integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
   20 :         crossorigin="anonymous"></script>
   21 : <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js"
   22 :         integrity="sha384-+YQ4JLhjyBLPDQt//I+STsc9iw4uQqACwlvpslubQzn4u2UU2UFM80nGisd026JF"
   23 :         crossorigin="anonymous"></script>
   24 : 
   25 : <div class="pos-f-t">
   26 :     <div class="collapse" id="navbarToggleExternalContent">
   27 :         <div class="navbar-expand-lg navbar-light bg-light p-4">


Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/base.py", line 204, in _get_response
    response = response.render()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/defaulttags.py", line 312, in render
    return nodelist.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/defaulttags.py", line 312, in render
    return nodelist.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/defaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/template/defaulttags.py", line 446, in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/urls/base.py", line 86, in reverse
    return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/urls/resolvers.py", line 694, in _reverse_with_prefix
    raise NoReverseMatch(msg)

Exception Type: NoReverseMatch at /kitchens/item/shoppinglist/
Exception Value: Reverse for '' not found. '' is not a valid view function or pattern name.

标签: django

解决方案


问题在于这条线

<td><a href="{%  url '' item.id %}">Brought</a></td>

添加一个有效的 URL 名称,例如

<td><a href="{%  url 'item-detail' item.id %}">Brought</a></td>

推荐阅读