Django文档说:
get_absolute_url()告诉Django如何计算对象的规范URL的方法.
什么是规范URL意味着这是上下文?
我从SEO的角度知道,规范URL意味着从类似的URL(example.com,example.com/index.html)中选择最佳URL .但是这个意思并不适合这种情况.
我知道这个方法在Django管理,重定向等方面提供了一些额外的功能.我完全知道如何使用这个方法.
但它背后的哲学是什么?我从来没有在我的项目中实际使用它.它有什么特殊用途吗?
Mar*_*ind 24
首先,在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>
Run Code Online (Sandbox Code Playgroud)
你的第二个问题是规范网址是什么.规范URL是某个页面的"官方"URL.有时,资产可以显示在多个不同的URL中,例如:
/en/shoes/1-nike-shoes/
/en/shoes/1-nike-shoes?sort=price&order=asc
/en/shoes/1-nike-shoes?sort=price&order=desc
Run Code Online (Sandbox Code Playgroud)
在这里,我们在3个不同的URL中显示相同的资产."Canonical URL"将是我们定义的主要URL.例如/en/shoes/1-nike-shoes/.
定义某个资产的官方或"主要"URL是非常有用的.当搜索引擎为您的网站编制索引时,它将允许您防止重复内容.
在您使用Django文档的引用的上下文中.在这种情况下,"Canonical"表示"显示此模型的官方URL".
小智 11
看这个例子:
我想为每个产品生成一个唯一的 URL,模式将是 - http://...../products/abcdefg/(在 '/products/' 之后是我的 slug 值)。
在models.py中,我创建了'get_absolute_url',它将以上述模式生成url
模型.py
class Products(models.Model):
title = models.CharField(max_length=120)
slug = models.SlugField(blank=True, unique=True)
description = models.TextField()
def get_absolute_url(self):
return f"/products/{self.slug}/"
Run Code Online (Sandbox Code Playgroud)
productlist.html - 锚标记中引用的 get_absolute_url
{% for obj in object_list %}
<a href="{{obj.get_absolute_url}} ">{{obj.title}}</a> <br>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
urls.py - 我的网址模式
path('/products/<slug>/', ProductDetails.as_view()),
Run Code Online (Sandbox Code Playgroud)
小智 9
您为您的网站创建模型。当为模型创建新实例时,django 必须知道在创建新帖子或创建新实例时该去哪里。
这get_absolute_url是图片。它告诉 django 在创建新帖子时去哪里。
get_absolute_url允许您的物体保持干燥。有一个定义该对象实例的 url。在大多数情况下,该对象的详细信息页面。
将此结合起来models.permalink,您可以非常轻松地定义对象详细信息 url。
Django 中的 @permalink 和 get_absolute_url 是什么?
稍后,如果您更改 url 的结构,则只需修改一处,即 urls。
| 归档时间: |
|
| 查看次数: |
10365 次 |
| 最近记录: |