📜  带有主键的 Django url (1)

📅  最后修改于: 2023-12-03 14:54:03.143000             🧑  作者: Mango

带有主键的 Django URL

在使用 Django 进行开发时,我们经常需要为不同的页面编写 URL,以便用户可以方便地访问。其中一种常见的 URL 类型是带有主键的 URL,也称为详情页 URL,用于表示某个具体对象的详细信息页面。

什么是带有主键的 URL?

带有主键的 URL 是一种 URL 类型,它使用一个数字或字符串作为对象的唯一标识符来标识该对象的详细信息页面。这个标识符通常是该对象在数据库中的唯一 ID,它被嵌入到 URL 中作为参数,从而访问该对象的详细信息页面。例如,一个带有主键的 URL 可能是像这样的:

/books/1/

在这个例子中,1 是书籍对象在数据库中的唯一 ID,/books/ 是 URL 的基本路径。用户访问这个 URL,将看到具体书籍的详细信息页面。

如何在 Django 中创建带有主键的 URL?

在 Django 中,我们可以使用 URLConf 来定义 URL 模式。定义带有主键的 URL 很简单,只需要在 URL 模式中使用 <int:pk><str:pk> 来表示主键。

from django.urls import path
from .views import BookDetailView

urlpatterns = [
    path('books/<int:pk>/', BookDetailView.as_view(), name='book-detail'),
]

在这个例子中,<int:pk> 表示主键为整数类型。<str:pk> 则表示主键为字符串类型。这个 URLConf 将请求发送到 BookDetailView 视图,以显示具体书籍的详细信息页面。我们还可以为这个 URL 命名为 book-detail,以便在其他地方使用。

如何在视图中获取带有主键的 URL 参数?

在 Django 中,我们可以通过 self.kwargs 来访问 URLConf 中定义的参数。例如,在详细信息视图中获取主键,可以使用以下代码:

from django.views.generic import DetailView
from .models import Book

class BookDetailView(DetailView):
    model = Book
    template_name = 'book_detail.html'
    context_object_name = 'book'

    def get_object(self, queryset=None):
        pk = self.kwargs.get('pk')
        return Book.objects.get(pk=pk)

在这个例子中,我们通过 self.kwargs.get('pk') 来获取 URLConf 中定义的主键参数,并将其用作 Book 模型的查询条件。

总结

带有主键的 URL 是 Django 中常用的 URL 类型之一,它允许我们通过一个唯一的标识符来访问对象的详细信息页面。在 Django 中创建带有主键的 URL 很简单,只需要在 URL 模式中使用 <int:pk><str:pk> 来表示主键。我们还可以在视图中使用 self.kwargs 来获取 URLConf 中定义的参数。