您的位置:

django报错ImproperlyConfigured("To use sitemaps, either enable the sites framework or pass ""a Site/RequestSite object in your view.")怎么办

  发布时间:2023-04-04 11:56:01
报错的原因这是 Django 中 Sitemap 框架的错误消息。还有其它一种方法就是需要在使用sitemap的地方给定RequestSite/Site实例使用指定site 实例, 这样就能够正确使用sitemap了。如何解决你需要在使用Sitemap框架之前,先配置sites framework或者在使用Sitemap时传入site实例。请注意,使用sites framework时还需要在管理后台添加网站记录,并将其默认站点设置为当前站点。使用例子这是一个在 views.py 中使用 Sitemap 时传入 site 实例的示例使用这是在urls.py中使用sitemaps并传入site实例的示例这样就可以避免错误了。

报错的原因

这是 Django 中 Sitemap 框架的错误消息。它表示您尝试使用 Sitemap 框架,但没有正确配置网站框架。

在使用Sitemaps框架之前需要先开启Django的sites framework, 您可以在settings.py中增加‘django.contrib.sites’

或者在使用sitemap的地方,把网站的实例传入sitemap的类中。


from django.contrib.sites.shortcuts import get_current_site

class MySitemap(Sitemap):
    def __init__(self, site=None):
        self.site = site or get_current_site(None)

sitemaps = {
    'mysite': MySitemap(),
}

urlpatterns = [
    ...
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
    ...
]

这样就可以避免这个错误了。

还有其它一种方法就是需要在使用sitemap的地方给定RequestSite/Site实例


def my_view(request):
    current_site = get_current_site(request)
    mysitemap = MySitemap(site=current_site)
    #使用sitemap
    return render(...)

指定site 实例, 这样就能够正确使用sitemap了。

总之就是缺少 site 的实例导致的错误, 有两种方法来解决,要么是使用sites framework 来配置sites,要么是在使用sitemap的地方提供 site 实例。

如何解决

你需要在使用Sitemap框架之前,先配置sites framework或者在使用Sitemap时传入site实例。

- 在settings.py中添加 'django.contrib.sites'

- 在使用Sitemap的地方传入site实例, 如


    current_site = get_current_site(request)
    mysitemap = MySitemap(site=current_site)

或者


    mysitemap = MySitemap(site=get_current_site(None))

也可以在创建sitemaps字典中传入site实例


    sitemaps = {
        'mysite': MySitemap(site=get_current_site(None)),
    }

这样就可以解决这个错误了。

请注意,使用sites framework时还需要在管理后台添加网站记录,并将其默认站点设置为当前站点。这样,在视图中使用 get_current_site(request) 将返回正确的站点。

更多关于使用Django sites framework的细节可以参考官方文档。

使用例子

这是一个在 views.py 中使用 Sitemap 时传入 site 实例的示例:


from django.contrib.sites.shortcuts import get_current_site

def my_view(request):
    current_site = get_current_site(request)
    mysitemap = MySitemap(site=current_site)
    # 使用 mysitemap
    return render(...)

这是在urls.py中使用sitemaps并传入site实例的示例:


sitemaps = {
    'mysite': MySitemap(site=get_current_site(None)),
}

urlpatterns = [
    ...
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
    ...
]

这样就可以避免 ImproperlyConfigured 错误了。