我正在使用Django开发一个博客应用程序。目前,URL /blog/
显示博客的首页(前五个帖子)。然后,访问者可以浏览或“翻阅”博客条目。此部分映射到/blog/browse/{page}/
,其中page
当然是一个整数,指定应显示哪些“页面”博客条目。
但是我想到,或许“页码”应该是查询字符串的属性(例如,/blog/browse/?page=2
),因为浏览页面的内容不是静态的(即,尽快)当我添加其他帖子时,/blog/browse/2/
的内容与之前添加帖子的内容不同。这似乎是像Stack Overflow和Reddit这样的网站做事的方式。例如,在Stack Overflow上查询问题时,使用"page" attribute;同样,Reddit使用"count" attribute。
扩展这种想法,我意识到我使用相同的模板来呈现/blog/
和/blog/browse/
的内容,所以甚至可以使用像/blog/?page=2
这样的网址翻阅博客内容。
有什么建议吗?是否采用“标准”方式,或者至少采用“最佳实践”方法?
答案 0 :(得分:4)
对于我的钱,这个问题的最佳通用方法是使用django-pagination实用程序。它非常容易使用,您的网址应该具有您想要的格式。
答案 1 :(得分:3)
我更喜欢使用GET URL参数,如URL?pg =#。这是非常常见的,并为用户提供有关正在发生的事情的标准视觉线索。例如,如果我想为其中一个页面添加书签或创建一个外部链接,我知道我可以放弃pg参数指向“最新”的首页索引。使用嵌入式#,这不是那么明显......我是否省略了参数?我总是要把它设置为1吗?它完全是一个不同的基本URL吗?对我来说,通过GET参数进行分页会产生一个稍微更合理的URL,因为如果省略参数并且参数不影响基本URL,则可以接受默认值。
此外,虽然我无法证明这一点,但它给了我温暖的模糊感觉,谷歌有更好的机会弄清楚该网页内容的性质(即它是进一步数据的分页索引,并且可能会经常更新)与嵌入在URL中的页面#相比,这将更加不透明。
那就是说,我认为这是99%的个人偏好,我非常怀疑是否有任何真正的功能差异,所以请选择更容易,更适合当前的做事方式。
编辑:忘了提到我的观点是特定于Django ...我有一些Django应用程序所以我对他们构建URL的方式比较熟悉,我仍然使用这些应用程序的“pg”GET参数而不是直接将其嵌入URL中。答案 2 :(得分:0)
似乎有两件事正在发生。一个静态页面,不会更改,可用于永久链接,如文章,以及将频繁更新的动态页面。没有理由你不能同时使用它们。 URL重写应该允许它很好地工作。没有理由让实现控制界面,总是至少有一种方法可以为每只猫提供皮肤。