Разгънете url django шаблони

имам стандартни 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),
}

Както можете да видите, предавам моделите на класа, така че по-късно мога да филтрирам 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_show url имена и така филтрирам url адреси, засега добре, проблемът е с включени url адреси като:

url('^',include('events.urls')),

Не мога просто да повторя self.patterns и да получа включените URL адреси, първо трябва да ги разширя, това е моят въпрос, как мога да направя това? Как мога да получа плосък списък с URL адреси, сякаш нямаше включени такива, всички бяха в един модул за URL адреси.

Всички препоръки за филтриране на URL адреси в sitemaps.xml ще бъдат високо оценени.


person Guillermo Siliceo Trueba    schedule 21.11.2012    source източник


Отговори (1)


Добре, трябва да отговоря на собствения си въпрос, защото го реших, това, което направих, беше малка функция за разширяване на моделите като този

def expand_patterns(patterns):
    new_patterns = []
    def recursive_expand(patterns):
        for p in patterns:
            if getattr(p,'url_patterns',False):
                recursive_expand(p.url_patterns)
            else:
                new_patterns.append(p)
    recursive_expand(patterns)
    return new_patterns

Това ще изравни url шаблоните в един списък. Така че сега мога да използвам self.patterns, за да филтрирам всичко в моя клас Sitemap :)

person Guillermo Siliceo Trueba    schedule 21.11.2012