使用Django动态创建新URL/页面

使用Django动态创建新URL/页面,django,dynamic,web-applications,Django,Dynamic,Web Applications,我正在开发一个程序,允许用户创建页面来监控和管理高中和大学可能正在进行的比赛,特别是MUN和取证比赛。每当用户登录时,他或她都可以选择创建一个新的锦标赛,这将为他们创建一个新的URL和基础网页,在那里他们可以根据自己的喜好编辑锦标赛。例如,如果一个用户创建了一个名为“Hello World”的锦标赛,那么我想让他们可以访问example.com/helloworld。是否有任何内置的Django函数可以帮助实现类似的功能?您可以在这里使用slug创建通用url模式: models.py url.

我正在开发一个程序,允许用户创建页面来监控和管理高中和大学可能正在进行的比赛,特别是MUN和取证比赛。每当用户登录时,他或她都可以选择创建一个新的锦标赛,这将为他们创建一个新的URL和基础网页,在那里他们可以根据自己的喜好编辑锦标赛。例如,如果一个用户创建了一个名为“Hello World”的锦标赛,那么我想让他们可以访问example.com/helloworld。是否有任何内置的Django函数可以帮助实现类似的功能?

您可以在这里使用
slug
创建通用url模式:

models.py

url.py

因此,我们有:当用户创建一个名为
Hello World
的新
锦标赛时,它将通过
example.com/Hello World
url提供

对于名称为
New contraction
的锦标赛,可通过
example.com/New contraction
url使用。等等

from django.db import models
from django.utils.text import slugify


class Tournament(models.Model):
    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length=50, unique=True)

    def _get_unique_slug(self):
        '''
        In this method a unique slug is created
        '''
        slug = slugify(self.name)
        unique_slug = slug
        num = 1
        while Tournament.objects.filter(slug=unique_slug).exists():
            unique_slug = '{}-{}'.format(slug, num)
            num += 1
        return unique_slug

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = self._get_unique_slug()
        super().save(*args, **kwargs)
urlpatterns = [
    path('<slug:slug>/', views.tournament_detail_view),
]
def tournament_detail_view(request, slug):
    tournament = get_object_or_404(Tournament, slug=slug)    
    return render(request, 'tournament/detail.html', {'tournament': tournament})