8

https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/?from=olddocsを使用しています。

ドメイン mydomain.com の api.mydomain.me から生成されたサイトマップがあります。

django でベース URL を指定できますか?

location() メソッドを使用すると、次のように返されます。

mydomain.com/page/3123 の代わりに api.mydomain.me/page/3123

これは可能ですか?ありがとう。

4

6 に答える 6

15

解決したので、独自の 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
于 2012-05-06T16:24:20.210 に答える
0

また、複数のサイトマップ クラスがある場合は、ミックスイン アプローチを使用できます。

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}),
)
于 2014-06-04T17:52:05.337 に答える
0

そのようなことを試すことができます:

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)

あなたのサイトマップを構築する前にそれを行い、その後デフォルトに戻す必要があります.

于 2012-05-03T04:59:06.870 に答える