Django 3.1 No reverse match at / not a registered namespace 错误

Django 3.1 No reverse match at / not a registered namespace error

我正在遵循 django 中关于在线商店设计的旧指南,但在我的一个应用程序模型文件中使用反向函数时遇到了一个奇怪的问题。这是我项目的总体结构:

shop(main project)
 |-myshop(preview of general website pages)
 |-utility(some utilities and context processors)
 |-catalog(catalog related modules of the website)
 |-cart(shopping cart module)
 |-manage.py
 |-db.sqlite3

这些是我的项目错误相关文件: 主要 urls.py

from django.contrib import admin
from django.urls import path, include
from myshop import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home_view),
    path('signup/', views.signup_view, name="signup"),
    path('sent/', views.activation_sent_view, name="activation_sent"),
    path('activate/<slug:uidb64>/<slug:token>/', views.activate, name='activate'),
    path('signin/', views.signin_view, name="signin"),
    path('logout/', views.logout_view, name="logout"),
    path('catalog/', include(('catalog.urls', 'catalog'), namespace='catalog')),
]

目录 urls.py:

from django.urls import path, re_path
from catalog import views

app_name = 'catalog'

urlpatterns = [
   re_path(r'^$', views.home_view, name='catalog_home'),   
   re_path(r'^category/(?P<category_slug>[-\w]+)/$', views.show_category, name='catalog_category'),    
   re_path(r'^product/(?P<product_slug>[-\w]+)/$', views.show_product, name='catalog_product'),
] 

目录 models.py:

from django.db import models
from django.urls import reverse

# Create your models here.
class Category(models.Model):      
    name = models.CharField(max_length=50)      
    slug = models.SlugField(max_length=50, unique=True,
        help_text='Unique value for product page URL, created from name.')      
    description = models.TextField()      
    is_active = models.BooleanField(default=True)      
    meta_keywords = models.CharField("Meta Keywords", max_length=255,help_text='Comma-delimited set of SEO keywords for meta tag')
    meta_description = models.CharField("Meta Description", max_length=255, help_text='Content for description meta tag')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)      
    
    class Meta:           
        db_table = 'categories'           
        ordering = ['-created_at']           
        verbose_name_plural = 'Categories'      
        
    def __unicode__(self):           
        return self.name

    def get_absolute_url(self):           
        return reverse('catalog:catalog_category', (), { 'category_slug': self.slug }, current_app='catalog')

这是模板试图用反向函数检索绝对 link:

<h3>Categories</h3> 
{% for c in active_categories %}      
<a href="{{ c.get_absolute_url }}"></a>{{ c.name }}</a><br /> 
{% endfor %}

目录可通过自定义上下文处理器获得:

from catalog.models import Category 
from shop import settings 

def shop(request):      
    return {
        'active_categories': Category.objects.filter(is_active=True),
        'site_name': settings.SITE_NAME,           
        'meta_keywords': settings.META_KEYWORDS,           
        'meta_description': settings.META_DESCRIPTION,           
        'request': request}

我已经尝试通过一些堆栈回答有关命名空间注册的问题来解决这个问题,但我失败了。我仍然在运行服务器时遇到此错误:

NoReverseMatch at /

'catalog' is not a registered namespace

我这是怎么了?

reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)

你不应该在反向函数中将空集 () 传递给 urlconf,删除它

def get_absolute_url(self):
   return reverse('catalog:catalog_category', kwargs={ 'category_slug': self.slug }, current_app='catalog')