首先,当涉及到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".