我正在使用https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/?from=olddocs。Django網站地圖更改基地址
我有一個從api.mydomain.me生成的網站地圖:mydomain.com。
我可以用django指定一個基礎url嗎?
與位置()方法返回現在:
api.mydomain.me/page/3123的 代替 mydomain.com/page/3123
這可能嗎? 謝謝。
我正在使用https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/?from=olddocs。Django網站地圖更改基地址
我有一個從api.mydomain.me生成的網站地圖:mydomain.com。
我可以用django指定一個基礎url嗎?
與位置()方法返回現在:
api.mydomain.me/page/3123的 代替 mydomain.com/page/3123
這可能嗎? 謝謝。
解決了,我重新定義了我自己的get_urls。 它的工作原理:
class MySitemap(Sitemap):
changefreq = "never"
priority = 0.5
location = ""
def get_urls(self, site=None, **kwargs):
site = Site(domain='mydomain.com', name='mydomain.com')
return super(MySitemap, self).get_urls(site=site, **kwargs)
def items(self):
return MyObj.objects.all().order_by('pk')[:1000]
def lastmod(self, obj):
return obj.timestamp
工程很好。我不知道你使用的是什麼版本的Django,但是如果你使用的是Django 1.5.1,只有在get_urls函數中添加一個「protocol」參數時,這個方法纔有效。 https://github.com/django/django/blob/1.5.1/django/contrib/sitemaps/__init__.py –
@deddamadre:我試過但面臨問題「get_urls()有一個意想不到的關鍵字參數」網站「」可以你請幫忙一下嗎?謝謝。 –
你可以嘗試出頭的那樣:
from django.contrib.sites.models import Site, SiteManager
def get_fake_site(self):
return Site(domain='mydomain.com', name='mydomain.com')
SiteManager.add_to_class('get_current', get_fake_site)
你應該構建你要跟Sitemap前做,並恢復之後違約。
小問題: 類型對象'SiteManager'沒有屬性'add_to_class' – beddamadre
是的,這隻適用於模型。無論如何,下面的解決方案更合適。 – ilvar
,如果你有數倍的Sitemaps類,您可以使用一個混合的方法。
Django 1.5.1的一個例子。
from django.contrib.sitemaps import Sitemap
from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse
from yourapp.models import MyObj
class SiteMapDomainMixin(Sitemap):
def get_urls(self, page=1, site=None, protocol=None):
# give a check in https://github.com/django/django/blob/1.5.1/django/contrib/sitemaps/__init__.py
# There's also a "protocol" argument.
fake_site = Site(domain='mydomain.com', name='mydomain.com')
return super(SiteMapDomainMixin, self).get_urls(page, fake_site, protocol=None)
class MySitemap(SiteMapDomainMixin):
changefreq = "never"
priority = 0.5
def items(self):
return MyObj.objects.all().order_by('pk')[:1000]
def location(self, item):
return reverse('url_for_access_myobj', args=(item.slug,))
def lastmod(self, obj):
return obj.updated_at
class AnotherSitemap(Sitemap):
changefreq = "never"
priority = 0.5
def items(self):
return ['url_1', 'url_2', 'url_3',]
def location(self, item):
return reverse(item)
的urls.py會是這樣的......
from sitemaps import MySitemap
from sitemaps import AnotherSitemap
from yourapp.views import SomeDetailMyObjView
admin.autodiscover()
sitemaps = {
'mysitemap': MySitemap,
'anothersitemap': AnotherSitemap,
}
urlpatterns = patterns('',
# other urls...
url(r'^accessing-myobj/(?P<myobj_slug>[-\w]+)$', SomeDetailMyObjView, name='url_for_access_myobj'),
(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
)
你有'django.contrib.sites'活躍?如果你這樣做,'sitemaps'將從那裏採取活躍的網站。 – ilvar
是ilvar,但我不想那個站點地圖從那裏站點。 我想指定我的個人基地網址。 現在返回:api.mydomain.me/page/3232(api.mydomains.me它是活動網站),但是,我想要的是:mydomain.com/page/3213 瞭解嗎? – beddamadre
是的。你可以猴子補丁網站,使它返回一些你需要的域名。 – ilvar