Django 的 reverse()
函数用于通过 URL 名称反向解析出 URL。
作用:
– 在函数视图、类视图、模板中生成 URL;
– 跳转页面时传递参数。
使用方法:
- 导入
reverse
函数:
from django.urls import reverse
- 使用
reverse()
函数来生成 URL:
url = reverse('视图函数的名称')
或者
url = reverse('命名空间:视图函数的名称')
其中,视图函数的名称
和 命名空间
是在定义 URL 时给出的。
- 生成 URL 后可以直接使用:
return redirect(url)
实例 1:在函数视图中使用 reverse
生成 URL:
from django.shortcuts import render, redirect
from django.urls import reverse
from .models import Post
def post_detail(request, pk):
post = Post.objects.get(pk=pk)
# 生成编辑页面的 URL
edit_url = reverse('blog:edit_post', args=[pk])
return render(request, 'blog/post_detail.html', {'post': post, 'edit_url': edit_url})
def post_edit(request, pk):
if request.method == 'POST':
# 处理表单提交
return redirect('blog:post_detail', pk=pk)
post = Post.objects.get(pk=pk)
return render(request, 'blog/post_edit.html', {'post': post})
在 post_detail
中,我们根据 Post
对象的主键 pk
生成一个名为 edit_post
的 URL。然后将这个 URL 传递给模板页面,在模板中可以通过 edit_url
变量来调用这个 URL。
在 post_edit
中,我们根据 Post
对象的主键 pk
生成名为 post_detail
的 URL。当表单提交成功后,我们通过 redirect
函数跳转到该 URL。
实例 2:在模板中使用 reverse
生成 URL:
{% extends 'base.html' %}
{% block content %}
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<p><a href="{% url 'blog:edit_post' post.pk %}">编辑</a></p>
{% endblock %}
在模板中,我们使用 {% url %}
模板标签来生成 URL,这个标签与 reverse
函数的作用类似。我们可以指定视图函数的名称和参数,生成对应的 URL。这里生成了 edit_post
视图的 URL,参数 post.pk
指定了被编辑文章的主键值。