1

У меня есть проект django, который близок к функциональности e-commerce wesite.NoReverseMatch в категории/одежда/Виды на основе Django

Имеются 4 страницы связаны друг с другом. Первая страница отображает Категории, 2-й подкатегории, третий Список продуктов и четвёртую деталь продукта и я использую слизней для навигации.

ОШИБКА Reverse for 'product-list' with arguments '('', 'women-clothes')' and keyword arguments '{}' not found. 1 pattern(s) tried: ['category/(?P<category_slug>[-\\w]+)/(?P<subcategory_slug>[-\\w]+)/$']

Категория в подкатегорию связывая код на category_list.html является <a href="{% url 'products-app:sub-category' category.category_slug %}">{{ category.name }}</a> и на views.py

class CategoryListView(ListView): 
    models = Category 
    template_name = 'products/category_list.html' 
    context_object_name = "Category list" 

    def get_queryset(self): 
     """ 
     Returns all categories. 
     """ 
     return Category.objects.get_queryset().all() 

и urls.py

app_name = 'products' 

urlpatterns = [ 
url(r'^$', CategoryListView.as_view(), name='categories'), 
url(r'^(?P<category_slug>[-\w]+)/$', SubcategoryListView.as_view(), name='sub-category'), 
url(r'^(?P<category_slug>[-\w]+)/(?P<subcategory_slug>[-\w]+)/$', ProductListView.as_view(), name='product-list'), 
url(r'^(?P<category_slug>[-\w]+)/(?P<subcategory_slug>[-\w]+)/(?P<pk>\d+)/$', ProductDetailView.as_view(), name='product-detail'),] 

Проблема связана с Подкаталог_list.html до product_list. Так как мне нужно category_slug и subcategory_slug быть перейти к

<a href="{% url 'products-app:product-list' category_slug subcategory_slug %}">{{ object.name }}</a>.

Я не знаю, как реализовать эту логику для использования cbv. Я хочу передать category_slug т.к. от Категория модели и запросы от Подкатегория модель. views.py

class SubcategoryListView(ListView): 
    """ 
    Browse all products in the sub-catalogue. 
    """ 
    model = Subcategory 
    template_name = 'products/subcategory_list.html' 
    context_object_name = "Sub-Category list" 
    category_model = Category 

    def get_queryset(self): 
     """ 
     Returns all sub-categories. 
     """ 
     self.category = get_object_or_404(Category, category_slug = self.kwargs.get('category_slug')) 
     return Subcategory.objects.filter(category = self.category) 

category.html, который работает.

{% for category in object_list %} 
    <div class="col-xs-12 col-md-12"> 
     <a href="{% url 'products-app:sub-category' category.category_slug %}">{{ category.name }}</a> 
     <p>{{ category.category_slug }}</p> 
    </div> 
    {% endfor %} 

subcategory.html

 {% for object in object_list %} 
     <div class="col-xs-12 col-md-12"> 
      <a href="{% url 'products-app:product-list' object.category_slug object.subcategory_slug %}">{{ object.name }}</a> 
     <p>subcategory_slug:{{ object.subcategory_slug }}</p> 
     </div> 
     {% endfor %} 

Как получить category_slug и передать его в приведенном выше зрения так, как я могу итерацию на них по шаблону?

ответ

1

Я действительно не вижу, как это связано с CBV. Вы не указали большую часть своего шаблона, но предположительно вы выполняете итерацию по подкатегориям и хотите ссылаться на страницу отдельного списка для этой подкатегории. Таким образом, вам просто нужно передать slug и категорию slug для текущей подкатегории в вашем цикле.

Это было бы проще, если бы вы показали остальную часть вашего шаблона и ваших моделей, но при условии, object является подкатегорию с поля под названием «subcategory_slug`, а модель SubCategory имеет FK Категория:

<a href="{% url 'products-app:product-list' object.category.category_slug object.subcategory_slug %}">{{ object.name }}</a> 
+0

Я обновил оба файла. @ Даниэль Роземан –

-1

я был в состоянии решить эту ошибку. Изменения

views.py

class SubcategoryListView(ListView): 
    """ 
    Browse all products in the sub-catalogue. 
    """ 
    model = Subcategory 
    template_name = 'products/subcategory_list.html' 
    context_object_name = "Sub-Category list" 
    category_model = Category 

    def get_queryset(self): 
     """ 
     Returns all sub-categories. 
     """ 
     self.category = get_object_or_404(Category, category_slug = self.kwargs.get('category_slug')) 
     return Subcategory.objects.filter(category = self.category) 

    def get_context_data(self, **kwargs): 
     """ 
     Returns self.category_slug needed 
     on the subcategory_list.html as a 
     one of the {% url %} slug params. 
     """ 
     context = super(SubcategoryListView, self).get_context_data(**kwargs) 
     context['categories'] = Category.objects.all() 
     context['category_slug'] = self.kwargs.get('category_slug') 
     return context 

На subcategory_list.html я изменил object.category_slug к category_slug.

Подкаталог_list.html <a href="{% url 'products-app:product-list' category_slug object.subcategory_slug %}">{{ object.name }}</a>.