生成Django网站地图.xml:如何修复“获取绝对\u url”

2024-05-12 13:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个“BigPage”模型,它有一个名为“pagename”的元素,它的unique设置为True。我希望使用django sitemaps框架来生成、填充和不断更新网站地图.xml通过将URL myapp.com/pagename添加到我的项目的网站地图.xml文件。这是我的BigPage模型:

class BigPage(models.Model):
    Pagename = models.CharField(max_length=128, blank=True, unique=True, null=True) #they will enter this input into a form field to reserve their unique url at myapp.com/pagename
    PageNameOwner  = models.CharField(max_length=128, blank=True, null=True) #owner of page enters their name
    OwnerGender = models.CharField(max_length=7, choices=(('male', 'Male'), ('female', 'Female')), blank=True, null=True) 
    PageViewsCounter = models.IntegerField(null=False, default=0)
    PageIsRemoved = models.BooleanField(default=False) #true if mods take down a person’s page

    def __unicode__(self):
        return self.Pagename

我已经创造了下面网站地图.py文件并将其放在BigPage模型所在的应用程序文件夹中:

^{pr2}$

然后,在主项目中网址.py文件(不是应用程序网址.py文件)我添加了以下内容:

sitemaps = {
'Name of Page':BigPageSitemap
}

对于urlpatterns元素:

url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})

我的应用程序网址.py具有以下url模式,其中如果在url字段中输入一个与pagename元素相匹配的术语,然后可以查询该元素以检索BigPage对象,那么它将加载该页面,但是如果输入的url不等于pagename元素,则会给用户一个404:

 url(r'^(?P<url_param>[a-zA-Z0-9_.-]*)/$', views.view_for_all_BigPages, name='view_for_all_BigPages'),)

在所有这些之后,如果我检查app文件夹或主项目文件夹,似乎不会生成站点地图文件。如果我去myapp.com/sitemap.xml我得到以下错误:

'BigPage' object has no attribute 'get_absolute_url'

我做错了什么事?我真的很感谢你的帮助。我已经试了好几天了。在


Tags: 文件py模型trueurl元素网站models
1条回答
网友
1楼 · 发布于 2024-05-12 13:27:29

docs

There is no location method in this example, but you can provide it in order to specify the URL for your object. By default, location() calls get_absolute_url() on each object and returns the result.

您没有在Sitemap类中定义location()方法,这就是它试图在模型上调用get_absolute_url()的原因。因此,您需要在模型中定义get_absolute_url(),如下所示:

class BigPage(models.Model):
    Pagename = models.CharField(max_length=128, blank=True, unique=True, null=True) 
    # ....

    def __unicode__(self):
        return self.Pagename

    def get_absolute_url(self):
        return reverse('view_for_all_BigPages', kwargs={'url_param': self.Pagename})

顺便说一下,模型属性是用小写字母pagename而不是Pagename。在

相关问题 更多 >