如何在 Django 中使用 URL 嵌套?

2023-04-11 00:00:00 django 嵌套 如何在

Django 中的 URL 嵌套可以使得 URL 形成一个树形结构,其中每个节点对应一个视图函数。在视图函数中,可以通过 URL 参数来访问某个节点的子节点,进一步处理请求。

以下是一个简单的代码演示,假设我们有一个博客网站:

  1. 在 urls.py 中定义根节点的 URL:
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('posts/', views.posts, name='posts'),
    path('posts/<int:pk>/', views.post_detail, name='post_detail'),
]
  1. 在 views.py 中编写视图函数:
from django.shortcuts import render, get_object_or_404
from .models import Post

def index(request):
    return render(request, 'index.html')

def posts(request):
    latest_posts = Post.objects.all().order_by('-created_at')
    context = {'latest_posts': latest_posts}
    return render(request, 'posts.html', context)

def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    context = {'post': post}
    return render(request, 'post_detail.html', context)
  1. 在模板中使用 URL 反查来生成链接:
<!-- index.html -->
<a href="{% url 'posts' %}">View Posts</a>

<!-- posts.html -->
{% for post in latest_posts %}
    <a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
{% endfor %}

<!-- post_detail.html -->
{{ post.title }}
{{ post.content }}
<a href="{% url 'posts' %}">Back to Posts</a>

在这个例子中,根节点为首页,访问根节点时会调用 index 视图函数返回一个 HTML 页面。posts 节点是根节点的子节点,访问 posts 节点时会调用 posts 视图函数并显示最新的文章列表。post_detail 节点是 posts 节点的子节点,访问 post_detail 节点时会调用 post_detail 视图函数并显示相应的文章详情。

在模板中,我们使用 URL 反查来生成链接。例如,{% url 'posts' %} 会生成 /posts/ 这个 URL,而{% url 'post_detail' pk=post.pk %} 会生成 /posts/1/ 这样的 URL,其中的数字 1 是文章的 ID。

在视图函数中,我们使用 GET 参数来获取 URL 中的参数值。例如,在 post_detail 视图函数中,我们使用 pk 参数来获取文章的 ID。这个参数是通过 <int:pk> 这个 URL 模式来定义的,其中 <int> 表示必须为整数,pk 则是参数名。在实际使用中,我们可以根据需要来定义不同类型的参数模式。

相关文章