gpt4 book ai didi

django - 使用 django-pagination 生成链接 refl=next/prev

转载 作者:行者123 更新时间:2023-12-02 08:28:28 27 4
gpt4 key购买 nike

我正在使用django-pagination对我的页面进行分页。它工作得很好,但我想设置

<link rel="prev" href="http://www.example.com/foo/?page=1" />
<link rel="next" href="http://www.example.com/foo/?page=3" />

<head> ,就像 recommended by google .

但是我发现没有办法做到这一点(至少没有额外的查询)。首先我尝试编辑 pagination/templates/pagination.html像这样的东西

{% block extra_head %}
<link rel=... ... />
{% endblock %}

这当然不起作用(pagination.html包含在 {% paginate %} 标签中,它不会扩展我的 layout.html )。接下来,我尝试将/foo/view 的模板修改为类似这样的内容(添加 {% block extra_head %} ):

{# foo.html #}
{% extends "layout.html" %}

{% block content %}

{% load pagination_tags %}
{% autopaginate object_list %}
{% paginate %}
{% for obj in object_list %}
{{ obj }}
{% endfor %}
{% paginate %}

{% endblock %}

{% block extra_head %}
<link rel="prev" href="?page={{ page_obj.previous_page_number }}"/>
{% endblock %}

但这也不起作用,因为 page_obj 变量仅在 {% block content %} 范围内可用。 。 A 可以调用

{% autopaginate object_list %}

extra_head block ,但这意味着对数据库的额外打击(以及可能的其他我不知道的副作用)。有没有一种优雅的方法来解决这个问题,最好是尽可能干燥?

编辑:我正在使用 django 1.2。

最佳答案

您可以在较高级别的 block 中执行{% autopaginate %},然后分页对象将在子 block 中可用。如果您没有更高级别的 block ,可以在基本模板中执行此操作:

{% block root %}
...
{% endblock %}

在扩展模板中:

{% extends "base.html" %}
{% load pagination_tags %}

{% block root %}
{% autopaginate objects 10 %}
{{ block.super }}
{% endblock %}

<!-- the rest of your code -->

现在,要在 head 中获得不同的分页器渲染,您可以使用 with标签:

{% with we_are_in_head=1 %}
{% paginate %}
{% endwith %}

并覆盖templates/pagination/pagination.html像这样的东西:

{% if we_are_in_head %}
# Your links to next and prev only
{% else %}
# original code
{% endif %}

道德

这并不优雅,原因是分页应该在 View 中实现。 模板仅用于渲染,模板标签也是如此。分页会产生额外的 sql 查询,它还会解析请求中的参数,模板对于此代码来说是完全错误的位置,因此必须发明解决方法。这些解决方法可能会在 django 的下一个版本中崩溃,它们也很微妙,可能会被其他开发人员意外破坏。

关于django - 使用 django-pagination 生成链接 refl=next/prev,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8133375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com