On Wed, Feb 21, 2007 at 12:32:30PM +0100, Gaute Amundsen wrote:
On Tuesday 20 February 2007 17:39, Paul Winkler wrote: <snip>
Another option is that the object at /articles could be an instance of a class that looks something like:
class MyArticleContainer():
def __before_publishing_traverse__(self, unused, request): # Save the rest of the path as 'traverse_subpath'. request.set('traverse_subpath', reversed(request['TraversalRequestNameStack'])) # Tell the publisher to stop traversing now. request['TraversalRequestNameStack'][:] = []
def __call__(self, *args, **kw): subpath = self.REQUEST['traverse_subpath'] data = get_data_however_you_like(subpath) return data
For background, read the stuff about traversal hooks at http://wiki.zope.org/zope2/ZPublisher
Hm.. that looks more like what I had in mind when I posted, but allso quite a bit more overhead than rewriterules. At least for me that has never written a product.
Well, it may feel like a lot of work to you the first time :-)
I will have to think about that one.. Would you care to elaborate a little bit on what the tradeoffs would be?
My approach might be good if: - the logic for looking up articles is more complex than can be comfortably expressed using apache rewrite rules, and/or - the logic for looking up articles requires state that's internal to zope. You could instead follow Andreas' suggestion and use a through-the-web Script. It might look something like: article_id = traverse_subpath[-1] data = context.get_the_data_somehow(article_id) return data Your URLs would then look like: http://example.com/folder_id/script_id/article_id Note that naming the script index_html doesn't really help, because http://example.com/folder_id/article_id wouldn't invoke the script. -- Paul Winkler http://www.slinkp.com