Django ListView页面和链接

时间:2014-08-29 21:34:26

标签: django url django-urls

我正在使用带ListView的Django pagination来整理我的博文。我还为每个帖子设置了一个slug,但是当帖子进入第2页以后,点击页面上的帖子链接会将页码添加到网址中。例如:

点击第1页上的链接:www.foo.com/myslug

点击第x页(不是1)的链接:www.foo.com/x/myslug

如何确保点击该链接转到该帖子的网址?这就是我设置它的方式:

HTML扩展程序

{% block content %}
    {% for post in object_list %}
    ...
    <h4><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h4>
    ...
    </div>
    {% endfor %}

    {% if page_obj.has_previous %}
    <a id='newer' href="/{{ page_obj.previous_page_number }}/">← Newer &nbsp;</a>
    {% endif %}
    <span id='pages' class="text-muted">Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</span>
    {% if page_obj.has_next %}
    <a id='older' href="/{{ page_obj.next_page_number }}/">&nbsp; Older →</a>
    {% endif %}

{% endblock %}

URLS

urlpatterns = patterns('',
# index
url(r'^(?P<page>\d+)?/?$', ListView.as_view(
    model=Post,
    paginate_by=5,
    )),
# individual posts
url(r'^(?P<slug>[a-zA-Z0-9-]+)/?$', DetailView.as_view(model=Post,
    )),
)

1 个答案:

答案 0 :(得分:2)

这是因为没有正确定义get_absolute_url。您应该覆盖该方法以返回该帖子网址。根据您的代码:

def get_absolute_url(self):
    return "/%s/" % self.slug