Django + Gunicorn + Nginx web中的Sitemap.xml文件

时间:2015-02-01 14:38:30

标签: django nginx gunicorn sitemap.xml

我正在使用Gunicorn + Nginx部署Django项目。我使用sitemap framework创建了一个sitemap.xml文件。我使用127.0.0.1:8001代理,所以当我访问example.com/sitemap.xml时,结果与此类似:

<url>
<loc>
http://127.0.0.1:8001/pages/item_1
</loc>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>

当我在Google网站站长工具中将sitemap.xml添加到Google索引时,Google不允许使用sitemap.xml,因为位置标记中的域名是127.0.0.1:8001,而不是我的域名。

这个问题有解决办法吗?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我想如果我理解你的问题,你就会问为什么google在访问127.0.0.1:8001时会出错?

127.0.0.1通常指向localhost

我非常确定google无法访问

您需要的是域名,或至少是您的服务器IP地址

一旦你有这些,请执行以下操作:

制作名为generate_sitemaps.py

的文件
from foo.models import Foo
from django.contrib import site maps

class FooSitemap(sitemaps.Sitemap):
    changefreq = "hourly"
    priority = 0.5

    def items(self):
        return Foo.objects.all()

    def lastmod(self, obj):
        return obj.updated


# make sure this is at the bottom of your generate_sitemap.py file
sitemaps = {
    'foo': FooSitemap,
}
在您的urls.py文件中

    来自generate_sitemap导入站点地图

urlpatterns += patterns('',
    (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'site maps': sitemaps})

在foo / models.py中,您将需要一个get_absolute_url方法来自动返回每个条目

Class Foo(models.Model)
    ....
    updated = models.DateTimeField(auto_now=True)

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

在您的设置文件中:

    INSTALLED_APPS = (
    ....
    'django.contrib.sitemaps',
    )

如果您需要有关在django中设置网站和域的更多信息,请使用结帐Django sites framework