Django Dynami c Дерево URL - PullRequest
1 голос
/ 05 марта 2020

Я новичок в 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'),
]

Как я могу это сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...