On Sunday, October 6, 2013 4:09:55 PM UTC-4, Mike Orr wrote: > On Sat, Oct 5, 2013 at 12:00 AM, Harvey Smith > <hlws...@gmail.com<javascript:>> > wrote: > > Currently in Pyramid v1.5a2 one cannot easily loop over a list of routes > to > > generate the URLs (for example to generate a nav menu) if some of the > routes > > are external and one wished to use URL paths instead of qualified URLs > > (easier to server through proxies.) This is because > Request.route_path() > > will raise an exception when called with an external route. > > > > Since external routes must contain the qualified URL by definition, it > would > > be more convenient if Request.route_path() just returned the qualified > URL > > instead of an exception in these cases. In other words > Request.route_path() > > should prefer to return URL paths when possible, but not bail out when > it's > > not. > > > > Or will this cause some evil side effects I am missing? > > That could go either way. I normally use route_path() but if I were > generating an external URL I'd probably call route_url() to make it > clear. On the other hand, I don't see anything wrong with route_path() > returning a fully-qualified external URL because an unqualified URL is > meaningless in that case. > > I'm not sure if we should support looping through routes though; that > sounds fragile. You'd have to know something about the routes to know > if each one was suitable for the menu, and if the routes require > parameters you wouldn't be able to generate them without the > parameters. >
In general I avoid hardcoding URLs into the templates. I generate them from the routes I've declared in the main __init__.py file, this way if/when a URL changes I can simply change it once in the route declaration. In the layout template I generate the main navigation menu by looping through the routes. I know what the routes are of course but I don't know the current route so this is tested for in the loop in order to set the css class in the html tag appropriately. I realize there are other ways to solve this problem (using JavaScript perhaps) but I've been doing it this way for years (from back with Pylons.) Now because I generate all my URLs in the templates I use the URL generation features of Akhet <https://github.com/Pylons/akhet> (https://github.com/Pylons/akhet) because they are shorter and fit my philosophy. I have already submitted a pull request to <https://github.com/Pylons/akhet/pull/6> Akhet <https://github.com/Pylons/akhet/pull/6> (https://github.com/Pylons/akhet/pull/6) which solves my problem at the moment for me. I wasn't sure if maybe it should be altered in pyramid proper instead though. -- You received this message because you are subscribed to the Google Groups "pylons-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to pylons-devel+unsubscr...@googlegroups.com. To post to this group, send email to pylons-devel@googlegroups.com. Visit this group at http://groups.google.com/group/pylons-devel. For more options, visit https://groups.google.com/groups/opt_out.