何时使用Django get_absolute_url()方法?

时间:2017-04-03 08:29:20

标签: python django

Django文档说:

  

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

规范网址在这个上下文中意味着什么?

从SEO的角度来看,规范网址意味着从相似的网址(example.comexample.com/index.html)中选择最佳网址。但这种意义并不适合这种情况。

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

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

4 个答案:

答案 0 :(得分:16)

首先,在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中,例如:

/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中显示相同的资产。 “Canonical URL”将是我们定义的主要URL。例如。 /en/shoes/1-nike-shoes/

定义某个资产的官方或“主要”网址非常有用。当搜索引擎为您的网站编制索引时,它可以防止重复内容。

在您使用Django文档的引用的上下文中。在这种情况下,“Canonical”表示“显示此模型的官方URL”。

答案 1 :(得分:2)

您为网站创建模型。为模型创建新实例时,django必须知道创建新帖子或创建新实例时要去哪里。

get_absolute_url出现在图片中。创建新帖子时,它会告诉Django去哪里。

答案 2 :(得分:0)

get_absolute_url可以让您的对象保持干净状态。要有一个定义该对象实例的URL。在大多数情况下,该对象的详细信息页面。

将此与models.permalink结合使用,您可以非常轻松地定义对象详细信息网址。

What is @permalink and get_absolute_url in Django?

稍后,如果您更改网址的结构,则必须仅在一个位置修改网址。

答案 3 :(得分:0)

请参见以下示例:

我想为每个产品生成一个唯一的URL,模式将是-http://...../products/abcdefg/(在'/ products /'之后,这是我的标准值)。

在models.py中,我创建了“ get_absolute_url”,它将按照上述模式生成网址

models.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}/"

productlist.html -锚标记中引用的get_absolute_url

{% for obj in object_list  %}
   <a href="{{obj.get_absolute_url}} ">{{obj.title}}</a> <br>
{% endfor %}

urls.py -我的网址格式

 path('/products/<slug>/', ProductDetails.as_view()),