What python web framework would you guys recommend for smaller web projects? Examples would be a small blog engine, simple news site etc. Django seems quite huge for simple projects, so recommendations are more than welcome.
I'm currently working with TurboGears. I evaluated pylons, django and web.py a year ago and made my decision. Here is a summary of my opinions (note from a year ago).<p>pylons: didn't really like the lack of decorators, didn't seem to be an ORM of choice, docs looked weak although the wiki was well stocked with recipies<p>django: really well documented. Seemed to be HUGE and I felt intimidated by it. It wasn't clear to me I could strip it down to what I needed. Didn't seem very modular, you can only use the Django ORM and templating engine.<p>web.py: Far to simple for my needs, you need to build nearly everything from scratch, simple to learn because there is nothing there!<p>I chose Turbo Gears because it seemed easier to chose the components you want to use. The idea that the TurboGears community picks best of breed python components and integrated them really appealed to me. This is both good and bad but in general I think it's been good for the project.<p>A year later and I haven't been disappointed. The TG community is really friendly as well :) TG is working with the pylons team for the next version of TurboGears and I know there has been a lot of code sharing between the groups.<p>That's my 2p, good luck.
I personally like web.py:<p>PROS: * Light and fast, * Really flexible, * Really easy to learn, * Easy to install, * Nice error reports (mostly copied from Django), * No database ORM<p>CONS: * No database ORM, just some helper functions: insert(...), update(...), select(...), etc. You must also build the DB tables by yourself. * Limited documentation.
Use Django for any web publishing app - blogs and news sites are its real strength. I'm using Django for what I would consider edge cases (eg building on-line databases) and it's not a perfect fit, although I think it will work.<p>If you learn Django, I'm sure you won't regret it. I don't think it's "huge" at all: it's compact and usable.
I prefer Pylons. I've built all sorts of things with it:<p>* A RSS-rewriting, caching "proxy" for the News.YC feed<p>* A search engine for 2 gigs of email, going back to 1995<p>* A customized CMS-like app<p>* And now, my blog, which I'm almost done writing; I keep making changes to the architecture.<p>TurboGears 2, which some have recommended, is being built on top of Pylons.
I like Pylons. I've used it for both big sites (<a href="http://www.bittorrent.com/" rel="nofollow">http://www.bittorrent.com/</a>) and small ones (<a href="http://codepad.org/" rel="nofollow">http://codepad.org/</a>), and it's been pretty good for both.
In Django you could build the core of either of those two examples in an afternoon. I have done so just for practice. Yes, you won't use 90% of Django's potential. But the 10% you do leverage lets you build something like that very easily.<p>For a simple blog you would need to write only a few views and templates, and then I would use the the built-in admin system to manage the content. Same sort of situation for the simple news site.<p>I always get flamed for suggesting to not reinvent the wheel, but if you want to do build something like a quick news site, why not leverage all the pre-existing work you can. Technology is not your differentiating factor.
/rant
I hate the name, but I've been very happy with cherrypy. Some things seemed too big (Django, Turbogears) and I liked how cherrypy managed routing and config details more than I liked pylon's implementation.
Whatever makes you happy and lets you get the job done efficiently.<p>Don't get stuck in paralysis through analysis. Find something that seems good and go with it.
Django. You won't regret it! The url mapping, the views and escpecially the template engine is fantastic. Almost every element of Django behaves as it should be. Strict separation from code and layout for example.
If you want to be adventurous, you can also look at Werkzeug (a collection of WSGI utilities) and choose whatever ORM (SQLAlchemy, SQLObject, etc) and template system (Jinja, Mako, etc) you want.
For very small projects (i.e. only a handful of users, no serious performance requirements), I typically use web.py (<a href="http://webpy.org" rel="nofollow">http://webpy.org</a>). It's very simple and offers only very basic functionality, but does a good job of staying out of the way and generally letting you do whatever you want. I've heard from friends that Pylons is also a good option, but I found it to be more complex than I really needed.
mod_python + mako<p>Edit: I started with Pylons but was simply overwhelmed by the complexity. I checked out but didn't use TurboGears and Django so I don't have to much to say about them. web.py is nice, but it's immature and some things don't seem to work the way they should.<p>So I rolled my own (if you can call it that) using the db module from web.py along with Mako and mod_python.<p>Yes before the WSGI zealots freak out let me say that it is NOT a WSGI solution but I could care less. It just works.
For smaller web projects? <a href="http://webpy.org/" rel="nofollow">http://webpy.org/</a><p>It's very simple, yet powerful enough to let you do pretty much anything you need to.
well django is definitely a good starting point.. but turbogears has very advanced templating engine... but for a beginning (like yours truly), django is very easy to setup and get it running..