我想要一个像这样的 URL 路径:
www.example.com/bachelor/frankfurt-university/corporate-finance
如您所见,本示例中的 URL 路径包含 3 个 slugs。
对于这些类别,我有 3 个不同的类别。 slug 分别包含在它们各自的内部。我需要做什么才能实现这种类型的 URL 路径?我可以使用单个 slug 来创建 URL 路径,但不能使用多个 slug 来创建 URL 路径。
每一个帮助或想法都受到高度赞赏。我找不到任何来源。
URLS.py
app_name = 'mnsdirectory'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'), #views.index
path('study/<slug:studylevelslug>/<slug:subjectslug>/', views.SubjectDetailView.as_view(), name='subject-detail'),
path('study-abroad/<slug:studylevelslug>/', views.StudylevelDetailView.as_view(), name='studylevel-list'),
]
VIEWS.py
class IndexView(generic.ListView):
model = Programmesearch
template_name = 'mnsdirectory/index.html'
context_object_name = 'universities'
queryset = Programmesearch.objects.all()[:6]
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['studylevels'] = StudyLevel.objects.all()[:10]
return context
class SubjectDetailView(generic.DetailView):
model = Programmesearch
template_name = 'mnsdirectory/subject_detail.html'
slug_field = 'subjectslug'
slug_url_kwarg = 'subjectslug'
class StudylevelDetailView(generic.DetailView):
model = StudyLevel
template_name = 'mnsdirectory/study_level.html'
slug_field = 'studylevelslug'
slug_url_kwarg = 'studylevelslug'
模型.py
class Programmesearch(models.Model):
study_country = models.CharField(max_length=100,
choices=COUNTRY_CHOICE)
full_subject_name = models.CharField(max_length=100, blank=True,
null=True)
def get_unique_slug(self):
subjectslug = slugify(self)
unique_slug = subjectslug
counter = 1
while mnsdirectory.objects.filter(subjectslug = unique_slug).exists():
unique_slug = '{}-{}'.format(subjectslug, counter)
counter += 1
return unique_slug
subjectslug = models.SlugField(unique=True)
def __str__(self):
return self.subjectslug
def get_absolute_url(self):
return reverse('SubjectDetailView', args=[str(self.id)])
def pre_save_programmesearch_receiver(sender, instance, *args, **kwargs):
subjectslug = slugify(instance.full_subject_name)
exists = Programmesearch.objects.filter(subjectslug=subjectslug).exists()
if exists:
subjectslug = "%s-%s" %(subjectslug, instance.id)
instance.subjectslug = subjectslug
pre_save.connect(pre_save_programmesearch_receiver, sender=Programmesearch)
class StudyLevel(models.Model):
title = models.CharField(max_length=100, blank=True, null=False)
studylevelslug = models.SlugField(unique=True, editable=False, max_length=100)
def __str__(self):
return self.studylevelslug
def get_absolute_url(self):
return reverse('StudylevelDetailView', args=[str(self.id)])
def get_unique_slug(self):
studylevelslug = slugify(self.study_level)
unique_slug = studylevelslug
counter = 1
while StudyLevel.objects.filter(studylevelslug = unique_slug).exists():
unique_slug = '{}-{}'.format(studylevelslug, counter)
counter += 1
return unique_slug
def pre_save_studylevel_receiver(sender, instance, *args, **kwargs):
studylevelslug = slugify(instance.study_level)
exists = StudyLevel.objects.filter(studylevelslug=studylevelslug).exists()
if exists:
studylevelslug = "%s-%s" %(studylevelslug, instance.id)
instance.studylevelslug = studylevelslug
pre_save.connect(pre_save_studylevel_receiver, sender=StudyLevel)