📅  最后修改于: 2023-12-03 15:30:29.293000             🧑  作者: Mango
在 Django 中,我们可以使用 slug 和 int 作为 URL 中的参数。slug 是一个字符串,用于代表对象的唯一标识符。而 int 则是对象在数据库中的自增 ID。
使用 slug 和 int 作为 URL 参数,可以让 URL 更为语义化,也方便搜索引擎收录。
在本文中,我们将介绍如何在 Django 中使用 slug 和 int 进行 URL 映射。
首先,我们来介绍如何使用 slug 进行 URL 映射。
假设我们有一个名为 Article
的模型,每篇文章都有一个唯一的 slug。我们的目标是实现一个 URL,当用户访问 example.com/article/slug-goes-here/
时,能够查看对应的文章。
我们在 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
这样的字符串。
接下来,我们需要编写视图函数来处理该 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 错误页面。
在模板中,我们可以使用 url
标签来生成对应的 URL。例如:
<a href="{% url 'article_detail' article.slug %}">{{ article.title }}</a>
这里使用 url
标签以及 article.slug
来生成对应的 URL。
与 slug 类型的 URL 相比,使用 int 类型的 URL 映射相对简单一些。
假设我们有一个名为 Product
的模型,每个产品都有一个唯一的 ID。我们的目标是实现一个 URL,当用户访问 example.com/product/123/
(其中 123
是产品的 ID)时,能够查看对应的产品详情。
我们在 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
这样的整数。
接下来,我们需要编写视图函数来处理该 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 错误页面。
在模板中,我们可以使用 url
标签来生成对应的 URL。例如:
<a href="{% url 'product_detail' product.pk %}">{{ product.name }}</a>
这里使用 url
标签以及 product.pk
来生成对应的 URL。
以上就是使用 slug 和 int 进行 URL 映射的方法。通过本文的介绍,相信你已经掌握了这两种 URL 参数类型的使用方法。