I'm thinking of taking a look at django just because guido tells me to, but I don't see any strong reason to switch.
I had to drop the built-in DB library once I needed to connect to multiple databases. Global DB connections = bad. I suspect that if I'd kept using it, I would've had problems with transactions too.
I had to replace some of the request dispatching when I wanted to add code that triggers on every request (eg. logging, transactions, custom session management, "who's online?", traffic analytics).
I had to drop the Cheetah integration to add internationalization support - Cheetah supports the _ function, but only in precompiled templates.
I had to drop Cheetah entirely as the templates got a little more complicated and I wanted to factor some bits out. Web.py patches the Cheetah #include directive to do what you'd expect: include a file at compile-time (which is the same as runtime under web.py). With precompiled templates, however, it includes it at runtime, which means the included file can't have any #defs. Big pain.
It's not a bad framework to start out with, but you will end up needing to ditch nearly all of it by the time you've handled everything a typical webapp needs. If I were to do it over again, I'd probably start with Pylons. I'd consider Django, but I'm not sure you can swap out Django components the way you can with Pylons.
If I were to switch to anything else, I'd probably try plyons first.
I still find it very appealing, because 99% of the time, it is used for common, simple websites. And in these cases, its simplicity pays off. I like that I don't have to fiddle with multiple files or configurations, since everything can be contained in a single file in a very clear way, and just adding "web.run" to your script converts it into a running website.