2010-12-16 130 views
1

Avec ASP.NET MVC, je peux simplement ajouter une action à une vue et cela fonctionnera automagiquement. Django semble me faire écrire chaque route dans le tableau urls.py - est-il possible de le mapper, par exemple "/ foo/bar" à foo.views.bar sans que je le dise explicitement?Django autoroute

Répondre

2

Je pense que la raison pour laquelle django vous fait écrire tout est quelque chose le long de ces lignes: What's wrong with "magic"?

En second lieu, la carte vous suggérez, il est difficile de traiter avec des arguments aux fonctions de vue. Le plus simple serait d'appliquer par convention que toutes les vues utilisent uniquement les arguments GET et POST et prennent autrement un ensemble standard d'arguments (par exemple request, template_name).

Pour implémenter cette carte, vous pouvez itérer sur votre module de vues et générer l'objet patterns. Rappelez-vous, c'est un hack vraiment laid et en grande partie défait le but du mapper url. Dans urls.py:

from django.conf.urls.defaults import * 

import myapp.views 

urlpatterns = patterns('myapp.views',                                 
    *map(lambda x: url(r'^myapp/%s/$' % x, x, name='myapp_%s' % x), 
     [k for k,v in myapp.views.__dict__.items() if callable(v)])) 
+0

Hmm, j'aurais pensé que cela correspond à DRY. Je vais essayer votre hack. – Xodarap