Django 在 Django 后台更改链接中添加 next url

Django 在 Django 后台更改链接中添加 next url

在本文中,我们将介绍如何在 Django 后台更改链接中添加 next url。使用 next url 可以在用户编辑数据后,重定向到指定的页面。

阅读更多:Django 教程

为什么要在 Django 后台添加 next url

Django 后台,当我们编辑一个实例时,通常会更改完成后返回实例列表页。但有时候我们需要重定向到其他页面,比如返回详情页或某个自定义页面。这时,我们可以通过在更改链接中添加 next url 来实现。

在后台中添加 next url 可以带来以下好处:
1. 可以自由选择重定向到哪个页面,增加了灵活性和可扩展性;
2. 可以提高用户体验,例如,数据编辑后直接返回到所在分类页;
3. 可以快速转到自定义的页面,便于进行其他操作。

如何在 Django 后台添加 next url

要在 Django 后台添加 next url,我们需要进行以下步骤:

步骤1:在模型中定义自定义的 get_change_url 方法

首先,在需要添加 next url 的模型中,我们需要定义一个自定义的 get_change_url 方法。这个方法会返回编辑实例时需要重定向的页面。

from django.urls import reverse

class YourModel(models.Model):
    # 模型字段定义

    def get_change_url(self):
        return reverse('admin:your_app_name_yourmodel_change', args=[self.pk]) + '?next=/your/redirect/url/'

在这个方法中,我们通过 reverse 函数生成编辑实例的 url,并结合我们需要重定向的页面路径构成完整的 next url。

步骤2:在模型后台中注册自定义的 ModelAdmin

接下来,我们需要在模型后台中注册自定义的 ModelAdmin 类,并将自定义的 get_change_url 方法应用到 change_view 方法中。

from django.contrib import admin

class YourModelAdmin(admin.ModelAdmin):
    # 后台配置

    def change_view(self, request, object_id, form_url='', extra_context=None):
        extra_context = extra_context or {}
        extra_context.update({
            'next': self.get_change_url(),
        })
        return super().change_view(request, object_id, form_url, extra_context=extra_context)

admin.site.register(YourModel, YourModelAdmin)

在这个 ModelAdmin 类中,我们重写了 change_view 方法,并在该方法中将自定义的 get_change_url 方法返回的 next url 添加到页面的上下文中。

步骤3:在更改链接中添加 next url

最后,我们需要在模板中的更改链接中添加 next url。在默认的 Django 后台模板中,找到相应的位置,将 {{ next }} 插入到链接中即可。

<a href="{{ original|admin_url:'change' }}" class="changelink">{% trans 'Change' %}</a>

修改后的更改链接代码如下:

<a href="{{ original|admin_url:'change' }}?next={{ next }}" class="changelink">{% trans 'Change' %}</a>

这样就完成了在 Django 后台更改链接中添加 next url 的操作。

示例说明

我们以一个博客系统为例来说明如何在 Django 后台添加 next url。假设我们有一个 Blog 模型,我们在编辑博客内容后,希望重定向到博客详情页而不是博客列表页。

首先,在 Blog 模型中添加自定义的 get_change_url 方法:

from django.db import models
from django.urls import reverse

class Blog(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()

    def get_change_url(self):
        return reverse('admin:blog_blog_change', args=[self.pk]) + '?next=/blog/detail/' + str(self.pk) + '/'

然后,在模型后台中注册自定义的 ModelAdmin 类:

from django.contrib import admin

class BlogAdmin(admin.ModelAdmin):
    def change_view(self, request, object_id, form_url='', extra_context=None):
        extra_context = extra_context or {}
        extra_context.update({
            'next': self.get_change_url(),
        })
        return super().change_view(request, object_id, form_url, extra_context=extra_context)

admin.site.register(Blog, BlogAdmin)

最后,在更改链接中添加 next url:

<a href="{{ original|admin_url:'change' }}?next={{ next }}" class="changelink">{% trans 'Change' %}</a>

这样,我们编辑博客内容后将会重定向到博客详情页。

总结

在本文中,我们介绍了如何在 Django 后台更改链接中添加 next url。通过在模型中定义自定义的 get_change_url 方法,将其应用到模型后台的 ModelAdmin 类中,然后在相应模板中的更改链接中添加 next url,我们可以实现在编辑实例后重定向到指定页面的功能。添加 next url 可以提高用户体验,增加灵活性,并方便进行其他操作。希望本文对你在 Django 后台中添加 next url 有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程