Question

J'ai une application Django assez standard et je me demande comment définir le routage des URL pour ne pas avoir à mapper explicitement chaque URL sur une vue.

Par exemple, supposons que j'ai les vues suivantes: Projet, Liens, Profil, Contact . Je préférerais que mes urlpatterns ne se présentent pas ainsi:

(r'^Project/

Et ainsi de suite. Dans les pylônes , ce serait aussi simple que:

map.connect(':controller/:action/:id')

Et il saisirait automatiquement le bon contrôleur et la bonne fonction. Y a-t-il quelque chose de similaire à Django?

, 'mysite.app.views.project'), (r'^Links/

Et ainsi de suite. Dans les pylônes , ce serait aussi simple que:

<*>

Et il saisirait automatiquement le bon contrôleur et la bonne fonction. Y a-t-il quelque chose de similaire à Django?

, 'mysite.app.views.links'), (r'^Profile/

Et ainsi de suite. Dans les pylônes , ce serait aussi simple que:

<*>

Et il saisirait automatiquement le bon contrôleur et la bonne fonction. Y a-t-il quelque chose de similaire à Django?

, 'mysite.app.views.profile'), (r'^Contact/

Et ainsi de suite. Dans les pylônes , ce serait aussi simple que:

<*>

Et il saisirait automatiquement le bon contrôleur et la bonne fonction. Y a-t-il quelque chose de similaire à Django?

, 'mysite.app.views.contact'),

Et ainsi de suite. Dans les pylônes , ce serait aussi simple que:

<*>

Et il saisirait automatiquement le bon contrôleur et la bonne fonction. Y a-t-il quelque chose de similaire à Django?

Était-ce utile?

La solution

mods = ('Project','Links','Profile','Contact')

urlpatterns = patterns('',
   *(('^%s/%n, 'mysite.app.views.%s'%n.lower()) for n in mods)
)

Autres conseils

Sauf si vous avez un très grand nombre de vues, les écrire explicitement n'est pas si mal, du point de vue du style.

Vous pouvez toutefois raccourcir votre exemple en utilisant l'argument préfixe de la fonction patterns :

urlpatterns = patterns('mysite.app.views',
    (r'^Project/, 'project'),
    (r'^Links/, 'links'),
    (r'^Profile/, 'profile'),
    (r'^Contact/, 'contact'),
)

Vous pourrez peut-être utiliser une fonction d'affichage spéciale dans les lignes suivantes:

def router(request, function, module):
    m =__import__(module, globals(), locals(), [function.lower()])
    try:
        return m.__dict__[function.lower()](request)
    except KeyError:
        raise Http404()

puis un urlconf comme ceci:

(r'^(?P<function>.+)/

Ce code n'a pas été testé, mais l'idée générale devrait fonctionner, même si vous devez vous en souvenir:

Explicit vaut mieux qu'implicite.

, router, {"module": 'mysite.app.views'}),

Ce code n'a pas été testé, mais l'idée générale devrait fonctionner, même si vous devez vous en souvenir:

Explicit vaut mieux qu'implicite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top