【问题标题】:Django ListView pages and linksDjango ListView 页面和链接
【发布时间】:2014-10-23 22:56:21
【问题描述】:

我正在使用 Django ListViewpagination 来组织我的博客文章。我还为每个帖子设置了一个 slug,但是一旦帖子进入第 2 页以上,单击页面上的帖子链接会将页码添加到 url。例如:

点击第 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 %}

网址

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,
    )),
)

【问题讨论】:

  • 为什么不对页码使用查询字符串变量并将其排除在 URL 路由之外?

标签: django url django-urls


【解决方案1】:

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

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

【讨论】:

  • 谢谢!我完全忘记了正斜杠
猜你喜欢
  • 2014-04-17
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 2015-09-08
  • 2023-03-03
相关资源
最近更新 更多