2009-09-22 6 views
4

S'il y a une manière indolore d'effectuer des modifications d'urlconf à l'exécution? par exemple. basé sur les enregistrements de la base de données?Django: configuration de l'url d'exécution

Bruteforce soluttion:

r('^(.*)/', handmade_router_function) 

est trop brutal pour moi :)

Merci à l'avance! Je comprends que je peux directement modifier les URLscript de mon code, mais cela nécessite beaucoup de codage manuel (actions d'admin-save personnalisées, suppression de gestionnaires, etc.). et je veux savoir s'il y a une application/bibliothèque prête à l'emploi :)

Répondre

2

Il y a une application contrib dans Django qui fait déjà cela, elle s'appelle FlatPages. Cela fonctionne en enregistrant un middleware. Lorsqu'une page est demandée si elle n'est pas trouvée, elle lance un 404 qui est intercepté par le middleware. Le middleware recherche la page dans la base de données s'il trouve la page et si non il en envoie un 404.

+0

Merci! exactement ce que je veux ATM :) –

0

Avez-vous essayé de modifier la variable "urlpatterns" à l'exécution?

+0

Oui, ça marche, mais il faut des douzaines de codes à la main (par exemple, des raccourcis d'administration, en regardant si l'URL était supprimé etc) Je me demandais juste s'il y a une application/bibliothèque de tierce partie qui peut m'aider :) –

0

Quelque chose comme ça fonctionne. Vous serez itérez quelque chose de différent, comme instances de modèle que vous avez mentionné, mais le principe est le même:

for path in ["foo", "bar"]: 
    urlpatterns += patterns("myapp.views", url(r"^%s/$" % path, "index", {}, name=path)) 

Je mis ce code dans mon urls.py. Il en résulte les points suivants étant mis en correspondance avec la vue:

http://127.0.0.1:8000/foo/ 
http://127.0.0.1:8000/bar/ 

Quelques choses à noter:

  1. Je ne suis pas sûr de ce que votre point de vue, si ce juste appelle une vue nommée index.
  2. Je nomme les URL après leur argument path respectif; vous pouvez choisir de les nommer différemment.
+0

J'ai mis à jour la description pour clarifier la question –