0

I read other questions, but I didn't find anything useful for Django 3, they just don't work.

The link type is needed like this: post/categories/subcategories/**etc

I think an adequate answer will be useful for everyone.

Tell me how to do it for DetailView

class Category(MPTTModel):
title = models.CharField(max_length=255, verbose_name=_('Заголовок'))
slug = models.SlugField(max_length=255, verbose_name=_('URL'), blank=True)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True, on_delete=models.CASCADE)

class MPTTMeta:
    order_insertion_by = ['title']

class Meta:
    unique_together = ['parent', 'slug']
    verbose_name = _('Категория')
    verbose_name_plural = _('Категории')

urls.py

urlpatterns = [
path('category/<slug:slug>/', CategoryListView.as_view(), name='category_detail'),
]

views.py

class CategoryListView(ListView):
model = Category
template_name = 'modules/post/category_detail.html'
context_object_name = 'category'
queryset = Category.objects.all()

def get_queryset(self):
    queryset = self.queryset.filter(slug=self.kwargs['slug'])
    return queryset
Razilator
  • 75
  • 5

1 Answers1

0

You can reverse urls.

codebase/urls.py
urlpatterns = [
    path('', include('my_app.urls', namespace='my_app_namespace')),
]
codebase/my_app/urls.py
urlpatterns = [
    path('category/<int:my_var>', views.my_view, name='my_view_name'),
]
codebase/any_python_file.py
from django.urls import reverse
reverse('my_app_namespace:my_view_name', args=[my_var])
>>> 'https://...'
Tiino
  • 78
  • 9
  • Hello! Thanks for the answer. I understand this. I ask to do it for the category tree, i.e. for mptt models, which has nested categories. – Razilator Aug 17 '21 at 17:48
  • I am sorry I don't understand your need. Can you explain with more details by editing your post ? – Tiino Aug 17 '21 at 19:19