Я новичок в Django и не могу найти решение своей проблемы. Как создать динамическое дерево URL c в Django подобном - site.com/ enjcategoryName broadcast/ndomitemName broadcast/
Теперь у меня есть это дерево URL:
site.com / item / {itemSlug} /
site.com / category / {itemCategorySlug} /
Но мне нужно:
site.com / {itemCategorySlug} / {itemSlug} /
Как создать это дерево URL без установки сторонних плагинов?
Модели
from django.db import models
from django.shortcuts import reverse
from services.slug.generator import generate_slug
class Category(models.Model):
name = models.CharField(max_length=400, unique=True)
description = models.TextField(max_length=1000, unique=True)
slug = models.SlugField(max_length=500, unique=True, blank=True)
seo_title = models.CharField(max_length=180, unique=True)
seo_description = models.TextField(max_length=280, unique=True)
class Meta:
verbose_name = 'category'
verbose_name_plural = 'categories'
def get_absolute_url(self):
return reverse('progress_category_url', kwargs={'slug': self.slug})
def save(self, *args, **kwargs):
if not self.id:
self.slug = generate_slug(self.name)
super().save(*args, **kwargs)
def __str__(self):
return self.name
class Progress(models.Model):
name = models.CharField(max_length=400, unique=True)
description = models.TextField(max_length=1000, unique=True)
slug = models.SlugField(max_length=500, unique=True, blank=True)
seo_title = models.CharField(max_length=180, unique=True)
seo_description = models.TextField(max_length=280, unique=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag)
date = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=False)
is_verified = models.BooleanField(default=False)
profile = models.ForeignKey(Profile, on_delete=models.CASCADE, blank=True, null=True)
promo_image = models.ImageField(upload_to='progress/promo_images/', null=True, blank=True)
class Meta:
verbose_name = 'progress'
verbose_name_plural = 'progresses'
def get_absolute_url(self):
return reverse('progress_url', kwargs={'slug': self.slug})
def save(self, *args, **kwargs):
if not self.id:
self.slug = generate_slug(self.name)
super().save(*args, **kwargs)
def __str__(self):
return self.name
Просмотры
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from .models import Progress, Category
class ProgressView(DetailView):
model = Progress
template_name = 'progresses/detail_tpl.html'
class CategoryView(ListView):
model = Category
template_name = 'progresses/list_tpl.html'
URLs
from django.urls import path
from .views import ProgressView, CategoryView
urlpatterns = [
path('progress/<slug:slug>/', ProgressView.as_view(), name='progress_url'),
path('category/<slug:slug>/', CategoryView.as_view(), name='progress_category_url'),
]
Так что в моем случае мне нужно создать что-то вроде этого:
urlpatterns = [
path('<slug:category_slug>/<slug:progress_slug>/', ProgressView.as_view(), name='progress_url'),
]
Как я могу это сделать