Помочь со вложенными url на Джанго

Имеются url следующего вида:

  • Сайт/категория

  • Сайт/подкатегория

  • сайт/статья

    class Category(MPTTModel):

     parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children',verbose_name='Главная категория')
    
     def get_absolute_url(self):
         return reverse('blog:category_url', args=[self.slug])
    

    class Post(models.Model):

     rubrics = TreeManyToManyField(Category, related_name='rubrics', verbose_name='Категория')
         def get_absolute_url(self):
         return reverse('blog:post_detail', args=[self.slug ])
    

ссылки должны получиться такие

Сайт/категория

Сайт/категория/подкатегория

сайт/категория/подкатегория/статья

Сам принцип понимаю: при переходе, например, в подкатегорию, ссылки должны передаваться два параметра, это слаг главной категории и подкатегории. Во вьюхе, в функции должны определить эти параметры, но сделать это правильно не получается.

Прошу проконсультировать. За персональную консультацию заплачу (цену называете вы)


Ответы (1 шт):

Автор решения: Andrey Maslov

в urls.py настрой пути

path(r'<slug:slug_category>', your_category_view, name='category_url'),
path(r'<slug:slug_category>/<slug:slug_sub>', your_sub_view, name='sub_url'),
path(r'<slug:slug_category>/<slug:slug_sub>/<slug:slug_artickle>', artickle_url, name='post_detail'),

дальше для категорий/подкатегорий

def get_absolute_url(self):
     if self.parent: 
         return reverse('blog:sub_url', args=[self.parent.slug, self.slug])
     else:
         return reverse('blog:category_url', args=[self.slug])

для статей, тут не совсем понятно как ты хочешь получать абсолютный урл, ведь у тебя идет привязка ManyToMany, следовательно таких урл может быть несколько и непонятно какой из них тебе нужен в данный момент, сделаю пока первый

def get_absolute_url(self):
     category = self.rubrics.first()
     return reverse('blog:post_detail', args=[category.parent.slug, category.slug, self.slug ])
→ Ссылка