0

我有一个简单的 CRUD 应用程序,它具有以下模型、List View 和 DetailView,其中 ListView 每页按 5 个项目分页。

我想在 DetailView 上放置一个后退按钮,这样它将带我回到访问 DetailView 的 ListView 页面,而不是转到第一页。

同样从 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

网址.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%}
4

1 回答 1

0

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

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

接下来在模板中使用从视图接收到的页码来构建后退按钮的 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>
于 2020-07-01T06:47:02.573 回答