As someone who's been using Django for the past 12 years in apps big and small, it blows my mind the trends towards microframeworks and minimalist frameworks that are objectively less productive in pretty much every metric.
Sometimes it feel like a minor superpower in just how much more productive it is over pretty much everything, especially in the early stages of development.
Even later on things like working auth and permission systems and API frameworks are huge timesavers.
I've not seen another ORM with tools as powerful as Django's select_related() and prefetch_related() when it comes to addressing the N+1 query problem, but maybe I haven't been looking hard enough.
I believe these complaints may be caused by lack of experience with Django:
- There is nothing wrong with the ORM, you may be resorting to using deferred attributes too much. There are ways to eliminate them (select_related, prefetch_related) if you are having performance issues.
- Jinja2 has been a supported templating engine for years.
- I don't understand the question about static type checking. Can you elaborate?
I think of the all the ORM's, I've ever used. Django was the greatest.
However django is living in the age of past glories.
The admin is extremely unacceptable for anything beyond trivial borderline trivial use cases, and the modifications you'd have to make are just awful especially the more interactive something needs to be. The extremely tight integration between models and the modeladmin is a blessing and curse.
The people who like Django,also tend to overload it to do everything. This makes sense at small companies. The only place I really see Django at large companies is as an api using DRF or something.
For internal admins, I've been lobbying to use https://directus.io/ at my company.
> The only place I really see Django at large companies is as an api using DRF or something.
This is not a bad thing. Using Django as an API backend is amazingly fast in terms of development time, especially with modern frameworks such as django-ninja [1].
Just use the built-in ORM to create models, write your endpoints, and use the built-in admin interface to play with the database if you don't have endpoints for everything.
There is also a less known feature of Django called admindocs [2], which automatically generates a human readable, hyperlinked documentation for your models and relations between them.
And with Django you often don't need to write anything.
You're right to some extent with all of your points (jinja2 is available, not default, ORM is equivalent to SQLA most but not all of the time), but they're one side of the trade-off. The other is that you're writing admin views that you likely wouldn't need to with Django.
It's not perfect for everything, but it is much faster to write with than anything else for reasons like this.
Sometimes it feel like a minor superpower in just how much more productive it is over pretty much everything, especially in the early stages of development.
Even later on things like working auth and permission systems and API frameworks are huge timesavers.
Proof that we are a fad-driven industry.