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 有所帮助。