Python Django 2:url中有多个slug
我目前正在学习django的教程。本教程将复制。在本教程中,他在url中只使用了一个slug,但我认为使用多个slug更方便,因为url将更有条理。例如,pythonprogramming.net上的教程链接如下所示:。我希望它在我的项目中看起来像是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
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
matchseries\u slug
和series.category
matchcategory\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
matchseries\u slug
和series.category
matchcategory\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