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