from django.urls import path, register_converter, reverse from . import kinds from .views import feeds, lists, perma from lemoncurry import breadcrumbs as crumbs register_converter(kinds.EntryKindConverter, 'kind') def to_pat(*args): return '^{0}$'.format(''.join(args)) def prefix(route): return app_name + ':' + route id = r'/(?P\d+)' kind = r'(?P{0})'.format('|'.join(k.plural for k in kinds.all)) page = r'(?:/page/(?P\d+))?' slug = r'/(?P[^/]+)' slug_opt = '(?:' + slug + ')?' app_name = 'entries' urlpatterns = ( path('atom', feeds.AtomHomeEntries(), name='atom'), path('rss', feeds.RssHomeEntries(), name='rss'), path('cats/', lists.by_cat, name='cat'), path('cats//page/', lists.by_cat, name='cat'), path('', lists.by_kind, name='index'), path('/page/', lists.by_kind, name='index'), path('/atom', feeds.AtomByKind(), name='atom_by_kind'), path('/rss', feeds.RssByKind(), name='rss_by_kind'), path('/', perma.entry, name='entry'), path('//', perma.entry, name='entry'), ) class IndexCrumb(crumbs.Crumb): def __init__(self): super().__init__(prefix('index'), parent='home:index') @property def kind(self): return self.match.kwargs['kind'] @property def label(self): return self.kind.plural @property def url(self): return reverse(prefix('index'), kwargs={'kind': self.kind}) crumbs.add(prefix('cat'), parent='home:index') crumbs.add(IndexCrumb()) crumbs.add(prefix('entry'), parent=prefix('index'))