关键词

详解Django的 get_absolute_url() 函数:返回模型对象的 URL

Django中的get_absolute_url()函数是一个作用于models.Model类的方法,它的作用是返回一个对象的URL,以便进行自动生成的链接,该函数可以被Django内置视图和其他第三方库使用。

使用方法

1. 在models.Model中定义get_absolute_url()

在models.py文件中,可以为每个必须展示在用户面前的模型定义get_absolute_url()方法,该方法应该返回该模型的访问URL。如下所示:

from django.urls import reverse

class MyModel(models.Model):

    name = models.CharField(max_length=100)
    pub_date = models.DateTimeField()

    def get_absolute_url(self):
        return reverse('myapp:mymodel_detail', args=[str(self.id)])

上述示例中的MyModel包含了一个名为name的CharField和一个名为pub_date的DateTimeField。我们定义了一个get_absolute_url()函数,以返回此模型的URL。

这里使用Django内置的reverse()函数,该函数根据给定的URL模式名称和参数返回一个URL字符串。

2. 在模板中使用模型实例的get_absolute_url()

如果想在模板中生成该模型对象的URL,可使用get_absolute_url()方法,如下所示:

<a href="{{ mymodel.get_absolute_url }}">{{ mymodel.name }}</a>

在此示例中,我们将mymodel对象的get_absolute_url()方法用于超链接的href属性。

示例

示例1:Blog类

from django.urls import reverse

class Blog(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)

    def get_absolute_url(self):
        return reverse('blog_detail', kwargs={'pk':self.pk})

在上述示例中,Blog类包括有标题,作者,文章具体内容以及发布日期等字段。在定义该模型时,我们定义了 get_absolute_url()方法以返回该模型的URL。

示例2:Tag类

class Tag(models.Model):
    name = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('tag_detail', kwargs={'pk':self.pk})

在上述示例中,Tag类针对于文章的分类而设,其包括只有一个名为name的字段。我们也为实例化的每个Tag定义了相应的 get_absolute_url()函数。

本文链接:http://task.lmcjl.com/news/4064.html

展开阅读全文