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')
我正在遵循 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')