2010-07-02 6 views
3

Comment gérez-vous les URL hiérarchiques dans Django? Des meilleures pratiques pour cela? Par exemple. Si j'avais une URL comme /blog/category1/category2/myblogentry (en utilisant par exemple django-mptt), voulez-vous faire un peu de vérification auparavant dans urls.py ou donner le chemin complet à une vue, qu'elle vérifie chaque partie si c'est une catégorie valide, etc. Cela ne semble pas si difficile, mais juste curieux si quelqu'un peut recommander quelques meilleures pratiques ou peut montrer quelques bonnes (génériques) des solutions?Django: URL hiérarchiques

Répondre

2

Je crains qu'il n'y ait pas de réponse unique à votre question. Le problème est qu'indiquer à quoi la hiérarchie ressemble au niveau de l'URL regroupe trop de logique avec elle.

J'ai trouvé utile pour les décorateurs d'utilisateur. Par exemple, dans votre cas, vous pouvez écrire un décorateur qui vérifie la santé mentale des catégories, et ne fait passer que la dernière catégorie dans la vue. Quelque chose comme un décorateur qui peut prendre une fonction avec cette signature:

f(request, cat1, catN..., slug) 

que chaque catégorie Vérification est en effet un parent à un autre, et de transmettre le point de vue de la catégorie vérifiée finale.

@validate_category_hierarchy 
def post_in_category(request, category, slug): 

Si vous avez vraiment besoin d'être extensible, le décorateur peut faire un peu d'introspection et de faire quelques suppositions (par exemple, comment l'arbre peut aller en profondeur, quels sont les autres paramètres comme, etc.).

Ensuite, tout ce que vous avez à faire est d'écrire vos confs d'URL avec soin, afin que le décorateur obtienne les paramètres en bonne forme. passer