我有标准的 django 1.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'),
)
我想构建我的 sitemap.xml 忽略一些 url,例如 /task url 不应该出现(这对网络蜘蛛没有意义)。我的策略是将所有 url 模式传递给我的 Sitemap 类,就像这样
from sitemaps import EventsSitemap, StaticSitemap
sitemaps = {
'Events': CandidateSiteMap,
'static': StaticSitemap(urlpatterns),
}
如您所见,我正在将模式传递给班级,因此我以后可以像这样过滤网址
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_show url 名称列表,这就是我过滤掉 url 的方式,到目前为止一切都很好,问题在于包含的 url,例如:
url('^',include('events.urls')),
我不能只迭代 self.patterns 并获取包含的 url,我必须先扩展它们,这是我的问题,我该怎么做?我怎样才能获得一个平面的 url 列表,就好像没有包含的一样,所有这些都在一个 urls 模块上。
任何在 sitemaps.xml 中过滤掉 url 的建议都将不胜感激。