Django文档说:

get_absolute_url()方法来告诉Django如何计算对象的规范URL.

在这是上下文中,规范URL是什么意思?

我知道从SEO的Angular 来看,规范的URL意味着从相似的URL(example.com,example.com/index.html)中挑选最好的URL.但是这个意思并不适合这个语境.

我知道这个方法在Django管理、重定向等方面提供了一些额外的功能,我完全知道如何使用这个方法.

但背后的哲学是什么?我从来没有在我的项目中实际使用过它.它有什么特殊用途吗?

推荐答案

首先,当涉及到Web开发时,您确实希望避免在模板中使用硬编码路径.这样做的原因是路径可能会更改,要遍历所有的HTML和模板来找到每个单独的URL或路径并手动更新它将是一件麻烦的事情.这会使您的代码更难维护.

解决此问题的方法是定义返回URL的函数.这就是get_absolute_url()的用武之地.

示例:

<!-- Bad -->
<a href="/language/category/product/{{product.pk}}">Link</a>

<!-- Good -->
<a href="{{product.get_absolute_url}}">Link</a>

标准链接

第二个问题是什么是规范的URL.规范URL是指向特定页面的"官方"URL.有时,一项assets资源 可以显示在多个不同的URL中,例如:

/en/shoes/1-nike-shoes/
/en/shoes/1-nike-shoes?sort=price&order=asc
/en/shoes/1-nike-shoes?sort=price&order=desc

在这里,我们在3个不同的URL中显示了相同的资源."规范URL"将是我们定义为主要URL的那个.例如,/en/shoes/1-nike-shoes/.

定义某项assets资源 的官方或"主要"URL非常有用.当搜索引擎索引你的网站时,它将允许你防止重复内容.

在Django文档中引用的内容中.在本例中,"Canonical"是指"显示此模型的官方URL".

Django相关问答推荐

在Python中向函数的查询列表添加条件

未强制执行枚举值

源自访问外键关系的模型方法 get_absolute_url 的 django 重复 SQL 查询

包含资源时,DRF 返回我的软删除记录

如何根据查询集中的条件返回多个聚合?

Django 长时间运行带有线程/处理的异步任务

在 GoDaddy 上安装 django 站点

Django 模型中的隐藏字段

djangorestframework:过滤相关字段

如何在 django 中生成 url

如何在django中生成临时文件然后销毁

如何按名称设置 django 模型字段?

Django:如何在视图中获取格式日期?

对 django 的 Http Delete 请求返回 301

Django post_save 在不覆盖模型 save() 的情况下防止递归

如何使 Django QuerySet 批量删除()更高效

如何在 Django 1.9 中删除 DB (sqlite3) 以从头开始?

Django Rest Framework 序列化程序中的循环依赖

如何在 django 2.0 admin 中使用 allow_tags?

Python Django 的多线程