Je pense qu'il y avait quelques facteurs, dont la combinaison était supérieure à la somme de leurs poids individuels.
L'un est simplement le timing: Django est apparu juste alors que la première grande vague de battage médiatique de Rails montait, et il a donc été immédiatement décrit comme étant une sorte de «réponse de Python à Rails». Cela a abouti à un nombre non négligeable de globes oculaires sur le projet presque dès le début. Le fait qu'Adrian ait participé à la rencontre "Snakes and Rubies" à Chicago et ait pu participer à des discussions côte à côte sur Rails et Django a fait beaucoup pour cela.
Un autre facteur est que Django est et a toujours été une installation mono-package (enfin, pas tout à fait: vous avez toujours besoin d'un adaptateur de base de données, sauf si vous êtes sur Python 2.5+ et que vous utilisez SQLite, mais assez proche). Les alternatives non-Zope, qui visaient toutes à laisser le choix des composants entre les mains du développeur, nécessitaient un peu plus de travail juste pour arriver au point où vous pourriez faire un tutoriel de base: vous auriez besoin d'aller à la recherche d'un ORM, un langue de modèle, etc., etc. et faites-les tous installés et configurés. Bien que cela se soit beaucoup amélioré au fil des ans, je pense que le souvenir persistant de cela a toujours un effet.
Et Django est sorti de la porte avec une documentation qui (si je puis dire moi-même) était bien au-dessus de la norme habituelle pour les projets open source, et ne s'est améliorée qu'avec le temps. Le didacticiel, malgré tous ses nombreux défauts, aborde un certain nombre de points forts qui rendent Django utile, et le reste de la documentation a toujours été de bonne qualité, mélangeant à la fois des références API et des éléments de "mode d'emploi" importants selon les besoins. Cela produit une bonne expérience prête à l'emploi et aide à la courbe d'apprentissage post-tutoriel (quelque chose qui a toujours tourmenté Zope).
Je pense aussi qu'il y a une perception - à tort ou à raison - que, disons, Pylons ou Werkzeug sont vraiment meilleurs pour les développeurs expérimentés qui connaissent déjà WSGI et l'écosystème Web Python; le fait qu'ils ont tendance à être de bons choix pour prendre vos bibliothèques préférées existantes et les brancher ensemble en est la source, je pense, et incite peut-être certaines personnes plus récentes à l'approche intégrée de Django. Le revers de la médaille, bien sûr, c'est que beaucoup de gens qui feraient mieux d'en apprendre plus avant d'essayer Django ne le font pas;)
Enfin, je pense qu'il y a quelque chose à dire sur la façon dont Django a été commercialisé, c'est-à-dire qu'il n'a pas vraiment été commercialisé depuis longtemps, ou du moins pas dans le sens où, disons, Rails était commercialisé. Jusqu'à ce que Django 1.0 débarque, l'effort de «marketing» consistait principalement à bloguer (et il y a eu des incidents notables où les gens ont été invités à atténuer un peu les choses), à discuter à PyCon puis surtout à améliorer le cadre, en créant des choses sympas avec et laisser les résultats parler d'eux-mêmes. Maintenant, bien sûr, dans le monde post-1.0, nous avons le DSF et DjangoCon et des consultants orientés métier qui font des sessions de formation et beaucoup de livres et tout le reste, mais tout cela est encore assez nouveau.
Je m'attends à ce qu'il y ait un contrecoup, tout comme il y en a eu avec Rails, et en fait, je pense que cela se prépare depuis un moment et a déjà commencé. Mais jusqu'à présent, je pense que les facteurs que j'ai énumérés ici sont au moins les principaux à l'origine de la croissance constante et régulière de la popularité que Django a connue depuis sa sortie initiale.