It would be safe for the routing code to treat hyphens as underscores when matching for app, controller, or function, though -- since web2py (and python) semantics require that the code itself uses underscores. Of course underscores in the rest of the URL would have to pass through untouched.
Reverse translation is not an issue, since I could just do something like: {{= DASH(URL(...)) }} Where DASH replaces all underscores with hyphens (which is acceptable for me, since I don't use any underscores in URLs), though it would be handy to make the routes.py configurable to do that automatically in the URL call itself if I wanted. On Aug 24, 9:46 pm, Jonathan Lundell <jlund...@pobox.com> wrote: > On Aug 24, 2010, at 8:03 PM, Kevin wrote: > > > As far as I can find, you have to set up web2py routes to do this -- > > it's pretty easy to do redirection using routes (using routes_in), but > > I'm not aware of any way off-hand to do the equivalent of rewriting/ > > translation the URL for inbound requests (routes_out does to > > translation). > > I think it would be difficult, unless you explicitly translated known > controller names. Which you could do... > > We could translate incoming hyphens to underscores, I suppose, without too > much effort, but we wouldn't know whether to reverse the translation on the > outbound side. > > Come the revolution (new rewrite logic), all things will be possible. But no > promises on a schedule. > > We *could* simply allow hyphens in controller names, without translation. We > can't do that with functions, since they need to function as Python > identifiers. > > > > > This is something I (and doubtless) many others need as well, and it > > really should be a (default enabled) option for web2py to > > automatically treat URL-embedded hyphens as though they were > > underscores for matching app, controller and function names, and an > > optionally enablable setting to make all generated routes use hyphens > > instead of underscores for apps, controllers, and functions. > > > The open-and-shut arguments for using hyphens boil down to (in order > > of severity): > > > * Underscores are obscured when URLs are underlined > > * Hyphens are easier to type than underscores – no need for the shift > > key > > * Hyphens are easier to read > > * Underscores are a typographical construction invented primarily for > > underlining characters (<key> <backspace> <underscore> on a > > typewriter), and today is used primarily in programming and other > > technical contexts. In short, there is little justification for > > exposing back-end considerations to the world. > > > Many references can be found on this subject: > > > *http://pylonsbook.com/en/1.1/urls-routing-and-dispatch.html#choosing-... > > *http://semicolons.org/post/256699383/friendly-urls > > *http://www.wordsellinc.com/blog/content-optimization/use-hyphens-not-... > > > This is one of the sore points I have with anything I put on the web > > -- to provide what I feel is a correct URL scheme to the user, I'll > > bypass or override half of the backend code if necessary, which is > > suboptimal. > > > Web2py is very close to making it easy to provide URLs that'll > > withstand the scrutiny of bloggers -- besides the hyphen bit, all I > > really see as being needed is: > > > * The aforementioned settings for hyphenization. > > > * in routes_in and routes_out add the ability to supply a function/ > > lambda in the second index of any inner two-tuple, which would receive > > a match object and return a string. For example, the following could > > be a stop-gap way to perform this kind of underscore-to-hyphen > > conversion: > > > routes_out = ( (r'/([^/]*)/([^/]*)/([^/]*)(/?P<any>.*)?', > > lambda match: '/'.join(part.replace('_', '-') for part in > > match.groups()) + match.group('any')), ) > > > On Aug 24, 7:47 pm, Cory Coager <ccoa...@gmail.com> wrote: > >> How do you use dashes in controller names? I get errors, "Invalid > >> request". > >