详细视图的详细视图中的上一页 - Django

Page previous in Detail View for Detail View - Django

我有一个页面详情视图,其中包含一个带有 link 按钮的详情视图。但是就像 url 需要 PK,我不能将 PK 设置为详细视图。如何在没有 PK 的情况下为上一页定义 url?

模板中

<button id="botaoVoltar" type="submit" class="mb-10 btn btn-light"><a href="{% url 'relatorio' ??? %}">Voltar</a> </button>

urls

path('relatorios/relatorio/<int:pk>', RelatorioView.as_view(), name='relatorio')

异常:

NoReverseMatch Exception Value:  
Reverse for 'relatorio' with no arguments not found. 1 pattern(s) tried: ['relatorios/relatorio/(?P[0-9]+)$']

您可以定义一个方法来查找上一个对象:

class RelatorioView(DetailView):
    # …
    def get_previous(self):
        return self.get_queryset().filter(
            <b>pk__lt=self.object.pk</b>
        ).order_by('-pk').first()

接下来我们可以用它来获取上一个:

{% with <b>prev=view.get_previous</b> %}
{% if prev %}
    <button id="botaoVoltar" type="submit" class="mb-10 btn btn-light">
        <a href="{% url 'relatorio' <b>prev.pk</b> %}">Voltar</a>
    </button>
{% endif %}