I agree that there is no real good answer to this, however the philosophy of the frameworks is slightly different - which lines up with the philosophies of python and ruby.
In Ruby/Rails, convention is considered better than configuration.
Rails does a whole load of things for you without telling you what it's doing. Objects have a method called method_missing
which will allow you to run methods that have no real "definition". For instance, when I use the new_user_path
method in Rails, there's no actual method called new_user_path
anywhere. It's being created based on a route to something else. If you ever need to find where something is happening in Rails, it can be a nightmare. That said, it doing a lot of things for you is extremely handy.
In Python/Django, quoting from the "The Zen of Python, by Tim Peters" (you can see it by typing import this
into a python console)
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
It's namely the "explicit is always better than implicit" and the "flat is better than nested" items where python and ruby differ wildly. Ruby blocks are a fundamental structure in Rails that create extremely deeply nested constructs.
That said, I have not used the Django framework thoroughly, so it's possible it doesn't conform to the same conventions as python.
It comes down to a matter of preference, really, but understand what you're getting into is always good.