何时使用Django get_absolute_url()方法?

Cod*_*ody 12 python django

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.有时,资产可以显示在多个不同的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 在创建新帖子时去哪里。


Bog*_*suc 6

get_absolute_url允许您的物体保持干燥。有一个定义该对象实例的 url。在大多数情况下,该对象的详细信息页面。

将此结合起来models.permalink,您可以非常轻松地定义对象详细信息 url。

Django 中的 @permalink 和 get_absolute_url 是什么?

稍后,如果您更改 url 的结构,则只需修改一处,即 urls。

  • 我很惊讶,因为这是我第一次读到有关 @permalink 装饰器的内容。实际上,它不再被记录,并且现在可能已被弃用。请参阅http://stackoverflow.com/a/16322584/1887976 (2认同)