私は標準のdjango1.4のURLパターンを持っています:
urlpatterns = patterns('',
url('^',include('events.urls')),
url(r'^$', home, {'template_name':'index.html','mod':None}, name='home'),
url(r'^contact$',contact, {'template_name':'index.html',
'mod':'contacto'},name='contact'),
url('^task/(?P<task_id>[\w+-]+)',celery_tasks,name='tasks'),
)
いくつかのURLを省略してsitemap.xmlを作成したいのですが、たとえば、/ task urlは表示されません(Webスパイダーには意味がありません)。私の戦略は、次のように、すべてのURLパターンをサイトマップクラスに渡すことです。
from sitemaps import EventsSitemap, StaticSitemap
sitemaps = {
'Events': CandidateSiteMap,
'static': StaticSitemap(urlpatterns),
}
ご覧のとおり、パターンをクラスに渡しているので、後でこのようにURLをフィルタリングできます
class StaticSitemap(Sitemap):
def __init__(self, patterns):
self.patterns = patterns
self._items = {}
self._initialize()
def _initialize(self):
do_not_show = ['tasks']
for p in self.patterns:
# no dynamic urls in this class (we handle those separately)
if not p.regex.groups:
if getattr(p,'name',False) and p.name not in do_not_show:
self._items[p.name] = self._get_modification_date(p)
だから私はこのdo_not_showURL名のリストを保持し、それがURLを除外する方法です。これまでのところ、問題は次のような含まれているURLにあります。
url('^',include('events.urls')),
self.patternsを繰り返し処理して、含まれているURLを取得することはできません。最初にそれらを展開する必要があります。それが私の質問です。どうすればよいですか?含まれているものがなく、すべてが単一のurlモジュールにあるかのようにURLのフラットリストを取得するにはどうすればよいですか。
sitemaps.xmlでURLを除外するための推奨事項をいただければ幸いです。