On Aug 25, 2010, at 1:42 AM, Kevin wrote:

> 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.

Are Python restrictions relevant for applications and controllers? Or just 
filename restrictions? I'm not sure.

> 
> 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.

It could be an option to URL, I suppose. I'm thinking that you wouldn't want to 
translate underscores in the query string.

> 
> 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".
>> 
>> 


Reply via email to