2010-04-05 1 views
3

Je suis la conception d'une application de galerie pour la visualisation des photos de véhicules et il y a deux paramètres:Quelle est la meilleure façon de formater les URL de Django pour deux paramètres, dont l'un est optionnel?

  1. Fabricant
  2. Type de véhicule

En ce moment, vous pouvez voir non plus, mais pas les deux. Urls vont comme ceci:

  1. /fabricant/#
  2. /Type/#

Où # est un numéro d'identification. Comment/puis-je formater mes URL afin qu'elles puissent accepter les deux? Ma solution actuelle est de faire:/both/#/# mais cela nécessite un certain réoutillage puisque l'application ne sait pas quand vous voulez filtrer par les deux. Toute idée serait appréciée.

Répondre

2

Si vous êtes dans une situation où les deux sont optionnels, votre meilleur pari est peut-être de le gérer via les paramètres GET.

+0

Wow, c'était exactement ça. Merci! – Parker

+0

Voulez-vous dire que vos URL ressembleraient à 'http: //example.com/view? Manufacturer = foo' et' http: //example.com/view? Type = bar & manufacturer = baz'? Je pensais que de tels paramètres GET étaient considérés par la communauté django comme étant laids et mieux évités. – blokeley

+0

Oui, ils devraient être évités si possible. Cependant, les paramètres GET existent pour une raison, et dans certaines situations, au moins à mon avis, il est acceptable de les utiliser si cela a un sens logique. – digitaldreamer

0

Probablement ce régime fonctionnera pour vous:

views.py:

def filtered_view (request, manufacturer_id=None, type_id=None): 
    ... 

urls.py:

... 
    url(r'^manufacturer/(?P<manufacturer_id>[0-9]+)/((?P<type_id>[0-9])/)?$', filtered_view), 
    url(r'^type/(?P<type_id>[0-9]+)/((?P<manufacturer_id>[0-9])/)?$', filtered_view), 
    ... 

Et selon la manière de l'utilisateur sur le site, urls sera /manufacturer/123/, /manufacturer/123/456/ ou /type/456/, /type/456/123/ (où 123 est un identifiant de fabricant, et 456 est l'ID du type de véhicule.)

Questions connexes