2014-12-29 5 views
0

Я студент, изучающий python django.Ошибка Django для NoReverseMatch

Я столкнулся с нижеприведенным сообщением об ошибке.

NoReverseMatch at/
Reverse for 'product' with arguments '(2,)' and keyword arguments '{}' not found. 
1 pattern(s) tried: ['$(?P<pk>[0-9]+)$'] 

Я попытался выполнить поиск и поиск со вчерашнего дня, но я действительно не знаю причины.

Не могли бы вы дать мне какой-либо совет или рекомендацию?

Django версия, который я использую, равен 1.7.

================================================================================================================= ==============================================

project_root/магазины/шаблоны/магазины/base.html

<!-- ** error occurs at this point ** --> 
<li><a href="{% url 'shops:product' category.id %}" > 

project_root/проект/urls.py

from django.conf.urls import include, url 
from django.contrib import admin 
from django.conf import settings 

urlpatterns = [ 
    url(r'^$', include('shops.urls', namespace="shops")), 
    url(r'^admin/', include(admin.site.urls)), 
] 

if settings.DEBUG: 
    urlpatterns += [ 
     url(r'^media/(?P<path>.*)$', 'django.views.static.serve', { 
      'document_root': settings.MEDIA_ROOT, 
     }), 
     url(r'^static/(?P<path>.*)$', 'django.views.static.serve', { 
      'document_root': settings.STATIC_ROOT, 
     }), 
] 

project_root/магазины/urls.py

from django.conf.urls import url 
from shops import views 

urlpatterns = [ 
    url(r'^$', views.IndexView.as_view(), name='index'), 
    url(r'^(?P<pk>[0-9]+)$', views.ProductView.as_view(), name='product'), 
] 

project_root/магазины/views.py

from django.views.generic.base import TemplateView 
from django.views.generic.list import ListView 
from django.utils import timezone 

from shops.models import Sex, Category, Product 


class IndexView(TemplateView): 
    template_name = 'shops/index.html' 

    def get_context_data(self): 
     context = super(IndexView, self).get_context_data() 
     context['sex_list'] = Sex.objects.all() 
     context['category_list'] = Category.objects.all() 
     context['latest_product_list'] = Product.objects.order_by('-pub_date')[:5] 

     return context 

class ProductView(ListView): 
    template_name = 'shops/product_list.html' 

    def get_context_data(self): 
     context = super(ProductView, self).get_context_data() 
     context['product_list'] = Product.objects.all() 
     return context 
+0

Попробуйте изменить свой 'project_root/project/urls.py' первый url на url (r '^', include ('shops.urls', namespace = "магазины")), ' – rfj001

+0

Он работает ... Большое вам спасибо! : D –

+0

Нет проблем! Я оставил ниже ответ, пытаясь объяснить, почему это фиксированные вещи. Вы можете пойти и принять его, чтобы показать, что это помогло :) – rfj001

ответ

2

Вы должны изменить url(r'^$', include('shops.urls', namespace="shops")), в project_root/проект/urls.py просто url(r'^', include('shops.urls', namespace="shops")), $ означает строки соответствия с символами точно так же, как и предшествующие $, поэтому, когда у вас есть pk в project_root/магазины/urls.py pk не рассматривается, потому что $ указан в исходном URL-адресе, где вы включаете все свои project_root/магазины/urls.py режет регулярное выражение.

Возможно, это могло быть сформулировано лучше ... но, надеюсь, вы поняли суть. Урлы, которые используются для включения других файлов url, должны почти никогда не содержать $

Смежные вопросы