📜  django slug int url 映射 - Python (1)

📅  最后修改于: 2023-12-03 15:30:29.293000             🧑  作者: Mango

Django Slug & Int URL Mapping

简介

在 Django 中,我们可以使用 slug 和 int 作为 URL 中的参数。slug 是一个字符串,用于代表对象的唯一标识符。而 int 则是对象在数据库中的自增 ID。

使用 slug 和 int 作为 URL 参数,可以让 URL 更为语义化,也方便搜索引擎收录。

在本文中,我们将介绍如何在 Django 中使用 slug 和 int 进行 URL 映射。

Slug URL 映射

首先,我们来介绍如何使用 slug 进行 URL 映射。

假设我们有一个名为 Article 的模型,每篇文章都有一个唯一的 slug。我们的目标是实现一个 URL,当用户访问 example.com/article/slug-goes-here/ 时,能够查看对应的文章。

1. 定义 URL

我们在 urls.py 中定义 URL:

from django.urls import path
from . import views

urlpatterns = [
    path('article/<slug:slug>/', views.article_detail, name='article_detail'),
]

这里我们使用 <slug:slug> 定义了一个 slug 类型的 URL 参数,用于匹配诸如 slug-goes-here 这样的字符串。

2. 编写视图函数

接下来,我们需要编写视图函数来处理该 URL 请求。在这个视图函数中,我们需要根据 URL 中的 slug 参数获取对应的 Article 对象,并在模板中渲染该对象的详细信息。

from django.shortcuts import render, get_object_or_404
from .models import Article

def article_detail(request, slug):
    # 获取对应的 Article 对象
    article = get_object_or_404(Article, slug=slug)

    # 渲染模板并返回 HTTP 响应
    return render(request, 'article_detail.html', {'article': article})

这里使用 get_object_or_404 函数获取对应的 Article 对象,如果找不到,则返回 404 错误页面。

3. 构造 URL

在模板中,我们可以使用 url 标签来生成对应的 URL。例如:

<a href="{% url 'article_detail' article.slug %}">{{ article.title }}</a>

这里使用 url 标签以及 article.slug 来生成对应的 URL。

Int URL 映射

与 slug 类型的 URL 相比,使用 int 类型的 URL 映射相对简单一些。

假设我们有一个名为 Product 的模型,每个产品都有一个唯一的 ID。我们的目标是实现一个 URL,当用户访问 example.com/product/123/(其中 123 是产品的 ID)时,能够查看对应的产品详情。

1. 定义 URL

我们在 urls.py 中定义 URL:

from django.urls import path
from . import views

urlpatterns = [
    path('product/<int:pk>/', views.product_detail, name='product_detail'),
]

这里我们使用 <int:pk> 定义了一个 int 类型的 URL 参数,用于匹配诸如 123 这样的整数。

2. 编写视图函数

接下来,我们需要编写视图函数来处理该 URL 请求。在这个视图函数中,我们需要根据 URL 中的 ID 参数获取对应的 Product 对象,并在模板中渲染该对象的详细信息。

from django.shortcuts import render, get_object_or_404
from .models import Product

def product_detail(request, pk):
    # 获取对应的 Product 对象
    product = get_object_or_404(Product, pk=pk)

    # 渲染模板并返回 HTTP 响应
    return render(request, 'product_detail.html', {'product': product})

这里使用 get_object_or_404 函数获取对应的 Product 对象,如果找不到,则返回 404 错误页面。

3. 构造 URL

在模板中,我们可以使用 url 标签来生成对应的 URL。例如:

<a href="{% url 'product_detail' product.pk %}">{{ product.name }}</a>

这里使用 url 标签以及 product.pk 来生成对应的 URL。

以上就是使用 slug 和 int 进行 URL 映射的方法。通过本文的介绍,相信你已经掌握了这两种 URL 参数类型的使用方法。