Ошибка NoReverseMatch в URL, X не зарегистрированное пространство имен - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь добавить простую функциональность корзины для покупок в мое приложение django, и я следую этому довольно простому учебнику.

Однако, пытаясь получить доступ к странице моей корзины, явыдается ошибка, в которой:

NoReverseMatch at /cart/
'main_page' is not a registered namespace

main_page - это имя моего основного приложения, в отличие от 'shop' в учебнике.

В моем models.py для main_page, после определения всехмои поля у меня есть:

def get_absolute_url(self):
    return reverse('main_page:collection_detail', args=[self.id])

Что, кажется, соответствует примеру, показанному в учебнике здесь

Код в моем шаблоне, который вызывает ошибкуэто:

<a href="{% url "main_page:collection_detail" %}" class="btn btn-default">Continue Shopping</a>

Кажется, все выстраивается, насколько я вижу.Чего мне не хватает?

edit: Включая мои шаблоны URL:

Из базового приложения, которое включает в себя URL-адреса других приложений:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('cart/', include('qfny_cart.urls')),
    path('', include('main_page.urls')),
    path('i18n/', include('django.conf.urls.i18n')),
    url('product/', include('main_page.urls')),

]

Из моего основного приложения main_app:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^bedroom/collection/(?P<name>[\w\-]+)$', views.collection_detail, name='collection_detail'),
    url('bedroom/', views.bedroom_view, name='bedroom_view'),
    url(r'^dining/collection/(?P<name>[\w\-]+)$', views.collection_detail, name='collection_detail'),
    url('dining/', views.dining_view, name='dining_view'),
    url(r'^living/collection/(?P<name>[\w\-]+)$', views.collection_detail, name='collection_detail'),
    url('living/', views.living_view, name='living_view'),
    url(r'^accesories/collection/(?P<name>[\w\-]+)$', views.collection_detail, name='collection_detail'),
    url('accessories/', views.accessories_view, name='accessories_view'),
    url(r'^office/collection/(?P<name>[\w\-]+)$', views.collection_detail, name='collection_detail'),
    url('office/', views.office_view, name='office_view'),

]

Из моей корзины:

urlpatterns = [
    url(r'^$', views.cart_detail, name='cart_detail'),
    url(r'^add/(?P<product_id>\d+)/$', views.cart_add, name='cart_add'),
    url(r'^remove/(?P<product_id>\d+)/$', views.cart_remove, name='cart_remove'),

]

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы даете пространство имен в вашем href, но не добавили его в urlpatterns,

Добавьте app_name в ваш urls.py, как это,

app_name = 'main_page'
urlpatterns = [
  # all your url/paths are here 
]

Или в другомспособ (не рекомендуется, если у вас более одного приложения), удалите main_page

<a href="{% url "collection_detail" %}" class="btn btn-default">Continue Shopping</a>

и отсюда

def get_absolute_url(self):
        return reverse('collection_detail', args=[self.id])
0 голосов
/ 26 декабря 2018

В вашем urls.py вам нужно объявить пространство имен следующим образом

url(r'^', include(('home.urls', 'your_app_name'), namespace='main_page')),

Для получения дополнительных знаний.попробуйте ссылку

...