top | item 2777883

Ask HN: Where is the Django community?

147 points| ciniglio | 14 years ago | reply

I'm debating whether to pick up Ruby on Rails in addition to my basic django knowledge, and as I explore the RoR community, I can't help but be amazed at how rich and active it is. For learning rails there are 3 very high quality books that talk about the latest version (Rails Way, Rails Tutorial, Agile Web Development with Rails). Compare this to the books available Django, none of which discuss the latest edition and many of which are outdated(e.g. Django book v2 (the latest ed.) covers Django 1.0!).

This doesn't touch on the huge number of blogs/sites that are dedicated to ruby news and tips (e.g. planetrubyonrails, railscasts, etc.).

Is there a reason for this discrepancy between the two ecosystems? Am I just not aware of where the Django community lives? Also, for those of you using Django or Rails, did the size of the community for your framework of choice influence your decision?

155 comments

order
[+] ulvund|14 years ago|reply
[+] tghw|14 years ago|reply
I think part of the difference is that the Django docs are just so good, there isn't a lot I can think of that a book would add.

DjangoSnippets.org is also pretty useful, as are the multitudes of Django apps available on GitHub and BitBucket.

You can also hang out in #django on freenode. People can sometimes be a bit gruff with noobs (though what IRC channel isn't) but there are usually some good discussions going on there.

[+] ehutch79|14 years ago|reply
The django docs arn't as good as they're made out to be, at least not any more. The major problem is they're lagging behind at this point, in both using the new core features such as class based views, and in best practices, such as the tutorial teaching reusable apps.

the core devs have said this themselves though on stage at cons, so i'm sure it'll get fixed at some point.

[+] c4urself|14 years ago|reply
tl;dr; (Not meant as a smart-ass comment but...) they're busy building stuff.

I think one of the interesting with Django is just how easy it is to get started with it without prior programming knowledge. I believe this has to do with Python itself and the great docs on Djangoproject.com

Just start doing the tutorial and voila. This has introduced a large amount of new programmers to Django and Python, making it gain in popularity extremely quickly. Case in point: when Django 1.0 came out the "core team" was often on Google Groups "django-users" answering even the most basic questions about programming.

Now most have moved on from Lawrence to businesses of their own; e.g. they're building cool new things. Other users within the Django community need to take over the baton and build up the community. I truly think there are tons of developers out there that are just using Django and haven't taken time to contribute back (I'm partly looking at myself) I think a new surge can take place in Django development in that respect; the user base Django has accrued over the years need to start returning the investment as it were.

Speaking for myself, I've been able to find most if not all information I needed online, and haven't so much needed to go to meetups or even irc and google groups. In this respect the lack of Django community you speak of rests on my shoulders and other Django users out there who haven't taken the time to contribute back to the community.

EDIT: I'm going to make a point of being more involved in the community via IRC etc.

[+] voidfiles|14 years ago|reply
I think the biggest thing most people are missing is that django is an okay base, but you shouldn't look just to the django community, you should look to the python community. Django is only one aspect of a whole stack, and you should be more worried about your language choice then your framework choice.
[+] maxklein|14 years ago|reply
Let me tell you the truth, though this will not be popular: Django is not a good framework. It's clumsy, inflexible and restrictive. The community is pretty much dead.

If you want to work in ruby, go for ror. If you want to work in python, go for a micro framework like Bottle.

I made the mistake of investing a lot of my time in Django. It was not worth it in the end. All my Django projects ended up being a big mess, and I had to undjango my way out of the various restrictions it placed on me.

And the community in general seems to agree - there is not much different in the django ecosystem, comparing 2 years ago to now.

My advice, go for Ruby On Rails or Bottle. Leave Django alone.

[+] ladyrassilon|14 years ago|reply
As someone who's been using Django since the magic removal branch, its documentation is top notch, not to mention the lack of magic makes it very usable, supportable, and build-able on. I can say definitely what's going on from the top layer to the bottom layer without any black box behaviour.

Rails is full of sloppy coding, lots of magic, coders who think that return is an keyword, and bad practices. I have no problem with ruby as a language, even if it takes flexibility a step too far, however the style of coders, and the general "I did something clever and unreadable so I'm awesome" attitude seems to permeate the ruby-verse. Also while many improvements have been made on the ruby interpreters... the performance is STILL lagging behind Python, which as a dynamic language with compiled backend elements, gives languages like Java a run for their money.

Both systems are very powerful, Django has certain batteries included that I find it strange that rails fails to do (namely a plugabble extensible flexible user authentication system) and both have their adherents.

The writer of this original piece is clearly not very up on Django development, the strong community apparently how to write well implemented MVC code. Having spent years working with a variety of frameworks, I've yet to find a place where Django stops you doing what you want (unless its a fundamentally stupid idea).

[+] andybak|14 years ago|reply
Wow. That's bit harsh. I'll try and stay civil.

"The community is pretty much dead." - not from where I'm standing. I live in a tech-savvy town and there seems to be more Django devs here than Rails devs. Of course - it's not a popularity contest otherwise PHP would be the best web framework ;-)

"All my Django projects ended up being a big mess" - that used to be the case with my own code but by reading other people's code (and the Django source) I've improved hugely. Should you be blaming your tools?

"And the community in general seems to agree" - the Django community agrees that Django sucks? Or did you mean the web dev community in general? If so - can you back that up with anything more substantial?

[+] flashingpumpkin|14 years ago|reply
I've got to disagree with you.

It's clumsy, inflexible and restrictive.

Pretty much anything can be swapped out with custom code. Need a custom auth backend? Just write a class. Need custom session backends? Just write a class. Need to customise a certain view of an application? Just override the url. Don't like the ORM? Just use something else. Have special caching needs? Write a backend.

A look at the release notes are full of good things and following them is definitely worth it. Since 1.3 you've got class based views that make it dead easy to create RESTful views for example. There's new logging support, you can have multiple databases with different backends.

The community is pretty much dead.

It's true that there was a lot more blogging happening in the earlier days. I suspect that the community is simply busy building new things - but a look at the CheeseShop shows on any day a healthy amount of new and updated Django components. Right now there are 7 Django projects on the main page.

All my Django projects ended up being a big mess, and I had to undjango my way out of the various restrictions it placed on me.

I'm a big fan of how Django creates structure through its applications. It makes it very easy to build parts of functionality on a plug and play basis and use them across projects.

Django offers a lot of functionality and it can be difficult to pick the right ones being a newcomer. But once you get the hang around applications and repositories and start working with "advanced" Django and Python features and apps like the built in signals, Celery, Fabric, GUnicorn, etc building and deploying apps becomes a breeze.

[+] shabda|14 years ago|reply
> The community is pretty much dead.

http://groups.google.com/group/django-users?pli=1

20245 Members, 126619 Threads

Last 12 hours, 14 new threads, 27 new messages

https://code.djangoproject.com/log/django/trunk

16546 changes, last change 28 hours ago.

> ....Django projects ended up being a big mess,

Are you sure it was not the result of the team you worked with, and not Django itself?

Everything else is hand wavy, but if you would bother to explain "clumsy, inflexible and restrictive" technically, I would be glad to respond technically.

[+] zeeg|14 years ago|reply
Django works just fine. If you want to build your own framework (e.g. use Bottle) then go for it. Waste [Invest?] the time while the rest of us are busy getting things done.

I don't think that you can compare ANY Python framework (or any framework in any language) with Ruby on Rails. If you write Ruby, use RoR. If you write Python, don't use RoR.

Also, for anyone recommending something like Tornado, please stop. It's NOT THE SAME THING and completely off topic. If you want something micro for a small concise project use Flask.

[+] benatkin|14 years ago|reply
> My advice, go for Ruby On Rails or Bottle. Leave Django alone.

Bottle has far fewer features than Django. It's hard to believe that Django is tripping you up if you aren't using its advanced features. You're welcome to discard the Django ORM, auth, models, and even have middleware return requests before it gets to django's router in some places.

I've had similar sentiments before, but ultimately I realized that I would have to fight with this kind of frustration no matter what tools I picked. The details would have been different, but my immaturity as a programmer would have been the same.

As time goes on I get better at substituting custom functionality if a framework doesn't do what I want. This can mean custom css, overriding templates, subclassing, or just placing my own objects in place of inbuilt functionality.

Finally, for a counter-example - not sure why convore split up and slowed down, but they were absolutely crushing it with Django when they first started. They were having Django handle some requests and a more low level server handle other requests (can't remember if it was Tornado or Twisted). There are countless other counter-examples.

[+] zeemonkee|14 years ago|reply
I have my own pet gripes about Django, but then I have gripes about any framework I've used, Rails included.

However, when I've seen a Django project that's a "huge mess" that's largely due to the incompetence of the developer. A more "rails-y" framework probably suits such developers, as it gives them less leeway to screw up.

[+] ubernostrum|14 years ago|reply
If you have specific constructive criticism I'm quite happy to hear it.
[+] glimcat|14 years ago|reply
Here's a true fact about programming:

Following the herd means that there's a better chance that someone will have already solved any given problem you encounter and released documentation or a drop-in implementation.

I like the idea of Django/Bottle/etc. because I use Python for a lot of my non-web stuff. But RoR has a bigger and more active population. Unless there's something specific to your situation which changes this equation, you'll save yourself time and effort if you go with the more mainstream option.

[+] peregrine|14 years ago|reply
Agreed. I've been using Django for 3months now and while the documentation is top notch, the examples are piss poor for things that are pretty much required to make anything past a simple blog.

And I actively reached out too, went to the IRC room, went to the forums, read the mailing list. And it feels dead, most blog posts with tutorials are years old and obsolete, there most of the applications we've tried to incorporate use deprecated methods. Its a real pain in the ass.

Not to mention the applications are all over the place, just look at this list https://code.djangoproject.com/wiki/DjangoResources#Djangoap... it has lots of components but most of the "suggested" are not on there? Even worse is that most of those links are to dead projects with no activity.

I would go with Flask, Bottle, or tornado and if you need an ORM go with sqlalchemy or Mongo.

/rant sorry its been a hard few months.

[+] malero|14 years ago|reply
I think RoR and Django are both great frameworks. If you think that Django is too restrictive or inflexible, you are relying too much on the framework and not on your own abilities as a programmer. Django gets you up and running quickly, Python is where the real magic happens.
[+] simonsarris|14 years ago|reply
This is what I did (Django for one project -> moved to Rails) and second this.

I think Django is a lot easier to get started with, but RoR is much more thought out.

OP should also read:

http://www.scribd.com/doc/37113340/Why-Django-Sucks-and-How-...

Which summarizes some of the problems I had with it. Getting components to work was always a custom job; a stark difference compared with the ease of getting Rails components to work.

[+] orblivion|14 years ago|reply
I complain about Django all the time, it seems like things could be done better. But I think I'm better with it than without it. It takes care of the vast majority of security issues out of the box. Does bottle do similar?
[+] philipn|14 years ago|reply
In what ways is Django clumsy, inflexible or restrictive?
[+] geekam|14 years ago|reply
From where I see, Django has a decent community. I have been helped a lot, I regularly go to meetups with a turnout of 20+ Django devs at a time.

Django is a Python framework. It has some nice features of Python like explicitness over implicitness rather than depending on a lot of magic. But in no way I feel it is a clumsy, inflexible or restrictive.

[+] jdost|14 years ago|reply
Actually, in my recent job hunt (in Chicago no less) I saw a very even distribution in RoR and Django centric jobs. I believe outside of the Chicago area, it may even move towards a more Django dominant role. I am unsure of whether this is due to the abilities of the framework or if Python is more accessible and widely used a language than Ruby.
[+] wisty|14 years ago|reply
IMO, Django had great documentation in it's time (i.e. the django book), which is why it's so popular; but the competitors have caught up, and people are questioning how good Django really is. The main advantages of Django are - lots of libraries, and the generic views. But I personally dislike generic views. They just feel a little like magic, and a little over-engineered. They might be good for larger projects, but using them from the start feels like premature overengineering.

I like Tornado. In the overview (http://www.tornadoweb.org/documentation/overview.html), it gives you - auth (using OpenID), secure cookies, XSRF protection, templates, localization, UI modules (really basic, compared to generic views), running in prodution with Nginx, and aync programming. It doesn't have much database stuff (just a wrapper around MySQL), but you can use SQLAlchemy, or some other ORM.

Only the auth stuff feels over-engineered, because it uses async programming to call a general interface for Facebook OAuth, OpenID, Twitter OAuth, and so it's a bit of a dog's breakfast.

[+] justhamade|14 years ago|reply
I am involved in Django and love it and the community. I only do RoR work when I have to and I hate it.

It comes down to personal preference. To me Django was much easier, more flexible, and "funner" to work in.

[+] endlessvoid94|14 years ago|reply
I couldn't agree more. Django's inability to deal elegantly with, for example, development vs. testing vs. production SETTINGS is an obvious drawback.

If I have to use third party middleware or apps to deal with inadequacies of a framework, that's a pretty big alarm that something bigger is wrong.

I saw bottle just this past week on HN and I'm itching to give it a shot.

[+] alexforget|14 years ago|reply
In my experience, I found it difficult from time to time to do certain thing, but when you dig deeper you almost always find that the hooks you need and the functionality you need is already there.

I come to think that the Django team must have the Guido's time machine. If you need something, take a good look, the solution might be under your feet.

[+] halayli|14 years ago|reply
web micro frameworks are evil although they don't look like that in the beginning, I advice to avoid them by all means.

IMO, even though pylons 1.0 is now frozen, it is still one of the most flexible frameworks out there.

[+] chrisgo|14 years ago|reply
Any experience with web2py?
[+] nvictor|14 years ago|reply
the problem is simple, most people come to django with no previous web development knowledge and no python experience. they expect it to "just work" like php.

this ain't gonna work that way. if you know python, you will always find your way out by looking at the django code (there lie the best examples of how to write django.)

and if you have web development experience, you will recognize the time you've wasted on boilerplate stuff django gives you for free.

'nuf said.

[+] alebairos|14 years ago|reply
"All my Django projects ended up being a big mess".

maxklein, it seems u lack descent programming skills, since my experience with django is completely different. Most of the time the problem is with who codes, not the framework or tool.

[+] espeed|14 years ago|reply
It's not so much Django is dead as is using a relational database as the primary datastore is dying.

Django (and Rails) both came from a time when the RDBMS ruled so they were built around an ORM and are very ORM centric. People are moving away from using a relational database and onto using Mongo or a graph database as the primary datastore.

Graphs are a much more elegant way of storing relational data, and so I prefer a framework that isn't so tied to the RDBMS. Now I use Flask as my Web framework and Bulbflow (http://bulbflow.com) to connect to the Neo4j graph database.

[+] jph|14 years ago|reply
Yes, pick up Ruby on Rails.

The RoR community is surely more vocal. Rails has been described as "an opinionated framework" and this ripples through many of the Ruby communities and projects.

Community thought leaders include people like Yehuda Katz, Jose Valim, Giles Bowkett, Ryan Bates, Ryan Davis, Loren Segal, and Charles Nutter, and companies like PeepCode, ThoughtBot, Intridea, EngineYard, and Pragmatic Programmer. There are many more of course.

In the Ruby ecosystem you'll often find these opinions lead to "more than one way to do it". Some examples that we're discussing at my company relate to comparisons of RubyGems/SlimGems, MRI/JRuby, Rails/Sinatra, RSpec/minitest, HTML/HAML, CSS/SASS, Capistrano/Chef, and many more choices.

I suggest you try RoR version 3.1 and you'll find many built-in pieces that can help you, including jQuery, HAML, SASS, the new asset pipeline, and more. You can use these or swap these out as you like. Heads up that some people think these provide too much "magic" and are hard to learn all at once, whereas other people think these are solid choices based on experience. Be sure whatever books you read are for Rails 3, not Rails 2.

Feel free to message me if you'd like more info.

And a plug: I'm hiring Rails developers.

[+] devonrt|14 years ago|reply
I think one of the reasons that RoR might seem bigger is because RoR is a much bigger part of the "Ruby experience" than Django is for Python. Rails had a huge hand in making Ruby what it is today and I think you'd have a hard time finding a Ruby dev that wasn't introduced through Rails.

This isn't true of Python, though. Most people are Python coders first, web framework users second. Their level of experience with Python has a part in dictating what they're looking for in a web framework and many experienced Python devs are more attracted to small or micro-frameworks like Bottle, Flask, web.py, etc. Django has never been the "one true web framework" for Python the way Rails is for Ruby. Personally I have never touched Django, just Flask and web.py.

Also, if you are going to base your framework usage on its popularity in comparison to Rails you're going to have a tough time ever being satisfied. When has any framework (web or otherwise) generated the same level of cult following as Rails? The Rails community is an absolute outlier in the open source software world (and I mean that in a positive way).

[+] araneae|14 years ago|reply
I went through this "ror vs. django" thing a few months ago, and ended up picking up Django.

I got the Django book and liked it and I had no problems with my actual project itself in terms of having enough "community."

However, now I'm in the "figuring out how to deploy it" stage and it's been a real pain. My free webhost supports RoR and python, but doesn't have Django installed, I don't want to spend the money on a VPS, and while there's been a recent surge of beta Django hosts, none of them have worked out for me. (I.e. I tried out gondor.io, it wouldn't deploy, I asked for help in the IRC channel, someone said they'd "look into it" but never got back to me.) I'm currently rewriting my models (db structure) for Google apps since it's basically my last hope.

I really love Django, so it pains me to say this, but you might want to check out RoR.

[+] robbles|14 years ago|reply
I think you'll find that any "free webhost" is going to give you a lot of trouble if you want to deploy a project built on a modern web framework.

Rule of thumb: if it doesn't have SSH access, and it's not a Platform-as-a-Service like Heroku or Gondor, you're probably not going to have much luck deploying anything except PHP or static HTML.

Check out webfaction.com, it's great for beginners and does most of the deployment for you.

[+] thingsilearned|14 years ago|reply
I've met a few of the creators of both the Rails and Django frameworks and noticed that their communities are very much a reflection of the creators.

DHH and crew tend to be very vocal and opinionated about their software.

The Django community (like the python community) tends to shun this type of behavior and prefers to let the code speak for itself.

[+] SoftwareMaven|14 years ago|reply
I'm not sure I believe the RoR community is larger than the Django community. I do believe it is more vociferous, though, which seems to be indicative of the general difference in communities between Ruby and Python.

It really doesn't matter which you choose. You will hit points with either where you are tearing your hair out trying to figure out how to do something. You'll find good peopke to help you in both communities. Eventually, that phase will pass and you will achieve Zen, until the next shiney framework shows up. :)

Personally, I really like Python as a language, so that's my path to Zen. Yours may be different.

[+] petercooper|14 years ago|reply
This is part of the reason that some people claim "the Ruby community" is full of drama. In reality, it has no more drama than any other group of people. The difference is, those people interact with each other and publish a lot, so any disagreements are more visible.

Anyway, maybe one place to start is http://djangoweek.ly/ - not exactly a community but it's a news service so you're likely to be led to interesting places.

[+] mbrubeck|14 years ago|reply
Mozilla's web development team uses Django for most of their current and new projects. If you come to #webdev on irc.mozilla.org they might be able to point to some other resources and gathering places.
[+] TheSmoke|14 years ago|reply
there are totally unfair comments to django, django committers and the django users. having used many tools such as grails, rails, django, pylons, turbogears and pyramid for different size of projects and loving them all i have a good amount of experience with these tools. whenever i needed a hand, people in #django (in irc.freenode.net) or a djangonaut's blog post or answer on stackoverflow or the django mailing list helped me out. same applies to rails as well.

what you like with rails is its just being fancy and people acting like it's a miracle. it's not. it's a a tool which helps you prototype your application with scaffolding and some other nice things in a very small amount of time. so is django. complex application means complex code. this is not a django thing. it applies to every tool. do not let screencasts or posts hypnotize you as those guys are working with rails for many years. you will not develop rails apps like they do when you start over. your code will suck. you won't like your own code as you learn ruby and rails in depth and sharpen your skills. oh wait, that applies to python and django as well. :) it's not you though, we all have been there.

one final note. django community does not need a reference book. because django documentation is a reference manual that contains everything a django developer needs. however a cookbook or application-type teaching book would be nice.

[+] hsparikh|14 years ago|reply
I am newbie when it comes to development, and I had the same choice between developing my product on RoR or Django. I chose Django, and between the tutorial, docs, and the google mailing list, I think there is a pretty good community out there.

A book would be nice, but there are some good apps on registraton, profile, etc. available on GitHub or BitBucket out there. Granted, it might not be plug and play like in the case of RoR, but I have found it to be alright so far.

[+] aspir|14 years ago|reply
I went through the very same experience you're going through now, and ended up with Rails. The largest deciding factor was the size of the community in my geographic area. Sure, there's always going to be a nontrivial online community for any activity, and the online presence of Django is enough to keep you going. But, you'll need to get some face-to-face interaction in there -- at least I needed that when learning. Waiting for a message board post is not the same as asking a few questions back and forth with a more experienced developer.

My impression that I got from both communities is that while both are good at fostering the growth of existing members (most programming communities do this well). Django is really bad at "evangelism," via teaching non developers to code via Python/Django or converting existing devs over to the framework. In contrast, the Rails community is better than most for profit groups at this (think about Microsoft's initiatives vs. something like Rails for Zombies).

For an example, compare the two homepages. The Rails page is much better at actually conveying the it's information effectively than Django.

[+] swiharta|14 years ago|reply
There are in fact more books focused on Rails compared to Django, and this logically reflects the inferior documentation of Rails compared to Django, necessitating and creating a greater market for additional documentation. This market doesn't exist so much for Django not because of the lack of interest in learning Django, but because the documentation is so good. End of that story.

As for the greater perceived online presence of the Rails community, I think this reflects two things:

1) Greater confusion among Rails users, who as a general group seem less technically inclined "on the whole" (there are obviously a ton of brilliant Rails developers as well). In general, Rails users want things to be pre-configured for them, and therefore never really learn how things work under the hood, and are thus ill-equipped to make simple changes to their own apps.

2) Greater Apple-like fanboy-ism among Rails users, which takes on a religious fervor with people thinking they have met salvation, and it makes them feel special. They love to evangalize about it, and this personality trait in part the perceived greater popularity of Rails.

That said, both frameworks are obviously still very popular and effective at building web applications. Try both and go with whichever one you like better, and stop fretting about whether you've made the "right" decision.

[+] philipkimmey|14 years ago|reply
Frankly, the discussion below turns quickly into bickering, but in response to your question, in my limited experience I think you've hit the nail on the head in terms of the size of the community, though I think that has more to do with the prominence of 37 signals etc and less to do with any technical superiority.

I personally prefer Django for a number of reasons though I've also been impressed by RoR in my dabbling. active record's migrations are nice, and the ease with which rails let's you write dynamically changing forms and various other niceness is really great.

Technical questions aside, I think RoR is the default web framework. At general hacker type meet-ups like Startup Weekend, Rails is pretty much the default framework to work in as more people are familiar with it.

Django is wonderfully well structured and literally just about anything can be accomplished elegantly by subclassing this or that. As you said, the difficulty comes in figuring out what and how to fill in those gaps, which more often than not includes heavy use of grep and browsing around the Django source.

I think you'll be fine with whichever you choose. Learning new languages and frameworks is enjoyable, so try some rails and see how you like it. Smart people and great projects have been done with both.

[+] sghill|14 years ago|reply
I have the same first two questions as you, so I'm glad you asked.

I can say a large part of me starting developing with Rails is the community. Many, many publishers have books. When I was in school our library had more material on Ruby/Rails than anything else in web dev. The online community is also fantastic as you've noted. Example: someone has taken the time to make ASCIIcasts out of Railscasts is incredible...and very helpful, as I'd often rather read than watch.

[+] rhizome31|14 years ago|reply
Yes it's true that the Rails and Ruby community is very talkative and innovative. I see a lot of projects being ported from Ruby to Python and not so much the other way around.

As for getting work done, in my experience Rails and Django are equivalent. The only thing against Rails is that it's slower, which can be a burden for development.