从 Django DeleteView 返回 Django ListView 分页列表中的右侧页面



我有一个简单的 CRUD 应用程序,其中包含以下模型,列表视图和详细信息视图,其中列表视图每页分页 5 个项目。

我想在 DetailView 上放一个后退按钮,这样它就会带我回到访问 DetailView 的列表视图页面,而不是转到第一页。

同样,在成功后从 DeleteView 中,我想回到 ListView 中已删除对象的页面,而不是转到第一页。

代码如下。

class BankAcType(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
name = models.CharField(max_length=100, verbose_name="Bank Account Type")
created_date = models.DateTimeField(default=timezone.now)
active = models.BooleanField(default=True)
def __str__(self):
return self.name

列表视图

class BankAcType_List(generic.ListView):
paginate_by = 5
def get_queryset(self):
return BankAcType.objects.filter(author=self.request.user).order_by('-created_date')

详细视图

class BankAcType_Detail(DetailView):
model = BankAcType

urls.py

path('bankactype_list/', views.BankAcType_List.as_view(), name='bankactype_list'), 
path('bankactype_detail/<int:pk>/', views.BankAcType_Detail.as_view(), name='bankactype_detail'), 

详细视图模板

{% extends 'base_admin.html' %}
{% block content %}
</br></br>
<h2 style="text-align: center;">Bank Account Type Detail View</h2>
</br>  
<div style="text-align: right; width: 60%; margin-left: auto;margin-right: auto;">
<a href="{% url 'bankactype_delete' pk=bankactype.pk %}" style="float: right; "><img src="/static/images/delete.png" alt="Edit" width="30" height="30"></a>&nbsp;&nbsp;<a href="{% url 'bankactype_edit' pk=bankactype.pk %}" style="float: right; "><img src="/static/images/edit.png" alt="Edit" width="27" height="30"></a>
</br></br>
<table class="table-bordered" style="width: 100%; padding: 2px; margin-left: auto;margin-right: auto;" >
<tr>
<td style="background-color: #000000; color: #ffffff; padding-right: 10px;">Bank Account Type</td>
<td style="background-color: #ffffff; color: #000000; text-align: center;">{{ bankactype.name }}</td>
</tr>
<tr><td style="background-color: #ffffff;"></td><td style="background-color: #000000;"></td></tr>
<tr>
<td style="background-color: #000000; color: #ffffff;padding-right: 10px;">Status</td>
<td style="background-color: #ffffff; color: #000000; text-align: center;">{{ bankactype.active|yesno:"Active, Inactive" }}</td>
</tr>
</table>
</div>
</br></br>
<div style="text-align: right; width: 60%; margin-left: auto;margin-right: auto;">
<a href="{% url 'bankactype_list' %}"><button style="background-color: #42c8f5; box-shadow: 10px 10px 25px -7px rgba(60,60,214,1.00); font-weight: bold; color: #054d05; float: left;">Back to List</button></a>
</div>  
{% endblock%}

我能够通过以下方式做到这一点。

首先查找对象在列表中的位置,然后使用它在视图中获取列表中列表的页码,并将其在上下文中传递给页面。(见下文(

接下来,在模板中使用从视图收到的页码为后退按钮构建 URL。(请参阅下面的模板(

视图

class BankAcType_Detail(DetailView):
model = BankAcType
pk = BankAcType.pk
def get_context_data(self, **kwargs):
context = super(BankAcType_Detail, self).get_context_data(**kwargs)
pk = self.kwargs['pk']
blist = BankAcType.objects.filter(author=self.request.user).values_list('pk', flat=True).order_by('-created_date')
position = list(blist).index(pk)
if position == 0:
page = "1"
else:
page = math.floor(position/5)+1
context ['page'] = page
return context

模板

<a href="/master/bankactype_list/?page={{page}}">Back</a>

最新更新