-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 01/30/2011 09:04 AM, Wade Leftwich wrote: > If you want to stick with Traversal, don't forget that you have > request.subpath available to you. For the path "/blog/archive/ > 2011/01/29/my-post-about-pyramid", you could have an Archive context > whose default (unnamed) view would be called with a request that > included request.subpath = ['2011', '01', '29', 'my-post-about- > pyramid'].
Other traversal-based strategies: - - an 'archive' view registered for the blog context (assuming you don't otherwise need the 'archive' context). - - add non-persistent placeholder objects to your app to take advantage of traversal's use of '__getitem__'. This solution allows you write views for the "transient" context classes, even though they aren't in your database. E.g., something like: - --------------------------- %< --------------------- class Blog: ... def __getitem__(self, key): if key == 'archive': return Archive(self) return super(Blog, self).__getitem__(key) class Archive: __name__ = 'archive' YEARS = range(2010, 2100) def __init__(self, blog): self.__parent__ = self.blog = blog def __getitem__(self, key): try: year = int(key) except TypeError: raise KeyError(key) if year not in self.YEARS: raise KyeError(key) return ArchiveYear(self, year) class ArchiveYear: __name__ = 'archive' MONTHS = range(1, 12) def __init__(self, archive, year): self.__parent__ = archive self.__name__ = str(year) self.blog = archive.blog self.year = year def __getitem__(self, key): try: mnnth = int(key) except TypeError: raise KeyError(key) # or, return self.blog.entries[key] if month not in self.MONTHS: raise KeyError(key) return ArchiveMonth(self, month) class ArchiveMonth: __name__ = 'archive' MONTHS = range(1, 12) def __init__(self, year, month): self.__parent__ = year self.__name__ = str(month) self.blog = year.blog self.month = month def __getitem__(self, key): return self.blog.entries[key] - --------------------------- %< --------------------- > The view would then call a method on the Archive context using > arguments constructed from the request.subpath. The Archive would in > turn make a single call to Mongo. A path like '/blog/archive/2011/01' > would require some logic in the view, to choose a different Archive > method and a different template to show a listing of posts for > January, or perhaps redirect to /blog/month/2011/01 . > > So if you are using Traversal in this way, the logic for parsing the > path lives in the view and/or the context. With URL Dispatch it's in > the configuration. Agreed. I find the traversal stuff much easier to test on this account. The fact that I find it easier to think about is likely due to the warp in my brain from years of heavy Zope usage. ;) Tres. - -- =================================================================== Tres Seaver +1 540-429-0999 tsea...@palladion.com Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk1FjgoACgkQ+gerLs4ltQ4fuwCdE04ygTijKNcWg6mLsLK8Ruq3 ewUAoL+DDXtoQk9+idz4PrwS0E2DaQbJ =g74T -----END PGP SIGNATURE----- -- You received this message because you are subscribed to the Google Groups "pylons-devel" group. To post to this group, send email to pylons-devel@googlegroups.com. To unsubscribe from this group, send email to pylons-devel+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/pylons-devel?hl=en.