django - 是否可以在 Django 中将第二个 slug 添加到 URL 路径?
问题描述
我正在使用 Django 2.1 版。
我想在我的项目中创建这种类型的 URL 路径:www.example.com/bachelor/germany/university-of-frankfurt/corporate-finance
是否可以在 Django 中做到这一点?
解决方案
是的,例如,假设您有一个用于 an 的 slugAuthor
和一个用于 a 的Book
,您可以将其定义为:
# app/urls.py
from django.urls import path
from app.views import book_details
urlpatterns = [
path('book/<slug:author_slug>/<slug:book_slug>/', book_details),
]
然后视图如下所示:
# app/views.py
from django.http import HttpResponse
def book_details(request, author_slug, book_slug):
# ...
return HttpResponse()
因此,视图需要两个额外的参数author_slug
(作者的 slug)和book_slug
(书的 slug)。
如果您因此查询/book/shakespeare/romeo-and-juliet
,author_slug
则将包含'shakespeare'
,并且book_slug
将包含'romeo-and-juliet'
。
例如,我们可以通过以下方式查找特定的书:
def book_details(request, author_slug, book_slug):
my_book = Book.objects.get(author__slug=author_slug, slug=book_slug)
return HttpResponse()
或者在 a 中DetailView
,通过覆盖get_object(..)
方法 [Django-doc]:
class BookDetailView(DetailView):
model = Book
def get_object(self, queryset=None):
super(BookDetailView, self).get_object(queryset=queryset)
return qs.get(
author__slug=self.kwargs['author_slug'],
slug=self.kwargs['book_slug']
)
或者对于所有视图(包括DetailView
),通过覆盖get_queryset
方法:
class BookDetailView(DetailView):
model = Book
def get_queryset(self):
qs = super(BookDetailView, self).get_queryset()
return qs.filter(
author__slug=self.kwargs['author_slug'],
slug=self.kwargs['book_slug']
)
推荐阅读
- apache-nifi - Apache NiFi - 如何将属性添加/传递给处理器,而不是流文件
- python-3.x - 未找到 OpenCV2 createBackgroundSubtractorMOG 属性
- c - 如何获取文件的路径
- java - 为 Java 多线程问题选择正确的数据结构和设计
- java - 将多个 Java Bean 转换为 JSON
- android - 如何使用 GoogleSigninButton?
- java - org.hibernate.service.ServiceRegistry 的 classnotfound 错误
- matplotlib - 在 python 中拟合 sigmoid 曲线
- django - 如何减少生成 Django restful 服务的 sql 数量
- php - PHP读取特定的选项卡行列并将其设置为循环