Python Django 2:url中有多个slug

Python Django 2:url中有多个slug,python,django,Python,Django,我目前正在学习django的教程。本教程将复制。在本教程中,他在url中只使用了一个slug,但我认为使用多个slug更方便,因为url将更有条理。例如,pythonprogramming.net上的教程链接如下所示:。我希望它在我的项目中看起来像是mydomain.com/data analysis/build supercomputer/1/。url将是域/类别/系列/集/,而不是域/集/ # urls.py from django.urls import path from . impor

我目前正在学习django的教程。本教程将复制。在本教程中,他在url中只使用了一个slug,但我认为使用多个slug更方便,因为url将更有条理。例如,pythonprogramming.net上的教程链接如下所示:。我希望它在我的项目中看起来像是
mydomain.com/data analysis/build supercomputer/1/
。url将是
域/类别/系列/集/
,而不是
域/集/

# urls.py
from django.urls import path
from . import views

app_name = "main"

urlpatterns = [
    path('', views.homepage, name="homepage"),  # View categories
    path("register/", views.register, name="register"),
    path("logout/", views.logout_request, name="logout"),
    path("login/", views.login_request, name="login"),
    path("<slug:series_slug>/", views.slugs, name="series_blocks"),  # Views all the series in that category
    path("<slug:series_slug>/<slug:tutorial_slug>/", views.slugs, name="tutorial_blocks"),  # View all tutorials in series
    path("<slug:series_slug>/<slug:tutorial_slug>/<int:id>/", views.slugs, name="tutorial_blocks"),  # View spesific tutorial nr.
]

我最初遇到的问题是出现了所有的
教程
,而不仅仅是
系列
中的那些。仅显示
系列
效果良好。 但现在,在试图解决这个问题之后,我真的不知道该怎么办。我对
views.py
做了很多更改,但现在它是原来的(来自sendtex),并且将教程段塞更改为Id,并为教程系列提供了段塞


如何使
views.py
仅在特定的
系列
等中显示
教程
。url中有多个slug

首先,您应该为每个url模式创建一个专用视图:

#url.py
URL模式=[
...
路径(“/”,views.category_blocks,name=“category_blocks”),#查看该类别中的所有系列
路径(“/”,views.series_blocks,name=“series_blocks”),#查看系列中的所有教程
路径(“///”,views.eposion_blocks,name=“eposion_blocks”),#查看专业教程编号。
]
#views.py
def类别块(请求、类别块):
#显示包含类别的所有教程的逻辑为“category\u slug”`
def series_块(请求、类别_段塞、series_段塞):
#显示包含类别的所有教程的逻辑为'category\u slug',系列为'series\u slug''
def教程块(请求、类别、系列、教程id):
#显示包含类别的所有教程的逻辑是“category\u slug”,series是“series\u slug”,tutorial是“tutorial\u id”`

逻辑与您已经编写的代码类似。不要忘记检查
tutorial.series.slug
match
series\u slug
series.category
match
category\u slug
要开始,您应该为每个url模式创建一个专用视图:

# Models.py
from django.db import models
from datetime import datetime


class TutorialCategory(models.Model):
    category = models.CharField(max_length=100)
    summary = models.CharField(max_length=200)
    slug = models.CharField(max_length=100)

    class Meta:
        verbose_name_plural = "Kategorier"

    def __str__(self):
        return self.category


class TutorialSeries(models.Model):
    series = models.CharField(max_length=200)
    category = models.ForeignKey(TutorialCategory, default=1, verbose_name="Kategori", on_delete=models.SET_DEFAULT)
    summary = models.CharField(max_length=200)
    slug = models.CharField(max_length=100)  # Not from tutorial, but this is the tutorial slug

    class Meta:
        verbose_name_plural = "Serier"

    def __str__(self):
        return self.series


class Tutorial(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField("date published", default=datetime.now())
    series = models.ForeignKey(TutorialSeries, default=1, verbose_name="Serie", on_delete=models.SET_DEFAULT)
    id = models.AutoField(primary_key=True)  # This was originally a slug, but now it's the episode number

    def __str__(self):
        return self.title
#url.py
URL模式=[
...
路径(“/”,views.category_blocks,name=“category_blocks”),#查看该类别中的所有系列
路径(“/”,views.series_blocks,name=“series_blocks”),#查看系列中的所有教程
路径(“///”,views.eposion_blocks,name=“eposion_blocks”),#查看专业教程编号。
]
#views.py
def类别块(请求、类别块):
#显示包含类别的所有教程的逻辑为“category\u slug”`
def series_块(请求、类别_段塞、series_段塞):
#显示包含类别的所有教程的逻辑为'category\u slug',系列为'series\u slug''
def教程块(请求、类别、系列、教程id):
#显示包含类别的所有教程的逻辑是“category\u slug”,series是“series\u slug”,tutorial是“tutorial\u id”`
逻辑与您已经编写的代码类似。别忘了检查
tutorial.series.slug
match
series\u slug
series.category
match
category\u slug

# Models.py
from django.db import models
from datetime import datetime


class TutorialCategory(models.Model):
    category = models.CharField(max_length=100)
    summary = models.CharField(max_length=200)
    slug = models.CharField(max_length=100)

    class Meta:
        verbose_name_plural = "Kategorier"

    def __str__(self):
        return self.category


class TutorialSeries(models.Model):
    series = models.CharField(max_length=200)
    category = models.ForeignKey(TutorialCategory, default=1, verbose_name="Kategori", on_delete=models.SET_DEFAULT)
    summary = models.CharField(max_length=200)
    slug = models.CharField(max_length=100)  # Not from tutorial, but this is the tutorial slug

    class Meta:
        verbose_name_plural = "Serier"

    def __str__(self):
        return self.series


class Tutorial(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField("date published", default=datetime.now())
    series = models.ForeignKey(TutorialSeries, default=1, verbose_name="Serie", on_delete=models.SET_DEFAULT)
    id = models.AutoField(primary_key=True)  # This was originally a slug, but now it's the episode number

    def __str__(self):
        return self.title