【问题标题】:'Post' object has no attribute 'get_absolute_url' Django'Post' 对象没有属性 'get_absolute_url' Django
【发布时间】:2021-06-16 15:17:26
【问题描述】:

我正在尝试在 Django 中创建站点地图,但出现错误

'Post' object has no attribute 'get_absolute_url'

这是我的另一个文件/sitemap.py

from django.contrib.sitemaps import Sitemap
from somefile.models import Post

class site_map(Sitemap):
    changefreq = "daily"
    priority = 0.8

    def items(self):
        return Post.objects.all()
    def lastmod(self, obj):
        return obj.time_stamp

这是我的 somefile/models.py

class Post(models.Model):
    number=models.AutoField(primary_key=True)
    slug=models.CharField(max_length=130)
    time_stamp=models.DateTimeField(blank=True)

def __str__(self):
        return self.number

【问题讨论】:

    标签: django sitemap


    【解决方案1】:

    为了确定站点地图中的路径,您需要为您制作站点地图的模型实现get_absolute_url,因此:

    from django.urls import reverse
    
    class Post(models.Model):
        number=models.AutoField(primary_key=True)
        slug=models.CharField(max_length=130)
        time_stamp=models.DateTimeField(blank=True)
    
        def get_absolute_url(self):
            return reverse('name-of-some-view', kwargs={'para': 'meters'})
    
        def __str__(self):
            return self.number

    reverse(…) [Django-doc]可以根据视图的名称和对应路径需要的参数计算出URL。

    【讨论】:

    • get absolute url value 是否与我的 post slug 匹配?
    • @user16241015:如果你需要 slug,那么在 kwargs=...,你需要传递那个 slug 的值
    • @user16241015:如果路径看起来像path(''posts/<slug:slug>/', some_view, name='post-detail'),那么我们用reverse('post-detail', kwargs={'slug': self.slug})反转。
    • 我希望我的站点地图 url 与 Slug 相同(在 Post 模型中)。我可以通过 kwargs={'slug': self.slug} 来实现吗
    • @uesr16241015:这取决于您为查看该帖子(详细信息)而构建的path(..)...
    【解决方案2】:

    我从未使用过它,但听起来您的 Post 模型没有 get_absolute_url 方法。

    http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/#django.contrib.sitemaps.Sitemap.location

    如果未提供位置,框架将调用 由 items() 返回的每个对象的 get_absolute_url() 方法。

    Model.get_absolute_url()

    定义一个 get_absolute_url() 方法来告诉 Django 如何计算一个对象的规范 URL。对于调用者来说,这个方法应该返回一个字符串,该字符串可用于通过 HTTP 引用对象。

    例如:

    def get_absolute_url(self):
        return "/post/%i/" % self.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 2015-04-19
      • 2019-04-30
      • 2019-03-30
      • 2019-08-25
      • 2020-02-11
      • 2015-02-19
      相关资源
      最近更新 更多