2009-12-14 5 views
0

Puis-je utiliser un intergiciel pour conserver plusieurs choix sélectionnés par l'utilisateur entre les demandes de page?Utilisation du middleware Django pour vérifier les variables GET dans l'URL de la page en cours

J'ai plusieurs valeurs, à savoir l'année du véhicule, la marque, le modèle, la série, le style, la couleur et la transmission. Je souhaite que l'utilisateur puisse sélectionner un choix tout en gardant le choix précédemment sélectionné actif. Je ne veux pas utiliser de sessions pour cela car je veux que l'URL soit signable.

Je pensais à quelque chose comme:

def get_choices(self): 
    try: 
     return self.REQUEST["year"] 
    except (KeyError, ValueError, TypeError): 
     return 1 

class ChoicesMiddleware(object): 
    def process_request(self, request): 
     ..... 

Je suis également pas sûr comment retourner tous les choix sous get_choices().

EDIT 1

def get_choices(self): 
    user_choices = {} 
    for key in ["year", "model", "make", "series", "style"]: 
     user_choices[key] = self.REQUEST.get(key) 

    return user_choices 

class ChoicesMiddleware(object): 
    def process_request(self, request): 
     return get_choices(self) 

EDIT 2 Mon URLConf est comme ci-dessous:

(r'^inventory/(?P<year>\d{4})(?P<make>[-\w\s]+) 
    (?P<model>[-\w\s]+)(?P<series>[-\w\s]+)(?P<body>[-\w\s]+) 
    (?P<exterior>[-\w\s]+)(?P<interior>[-\w\s]+) 
    (?P<transmission>[-\w\s]+)$', 'inventory'), 

Ensuite, la vue est comme ci-dessous:

def inventory(request, page_by=None, year=None, make=None, 
    model=None, series=None, body=None, interior=None, exterior=None, 
    transmission=None): 

    #Initialize empty variable list. 
    kwargs = {} 

    if "year" in request.GET: 
    year = request.REQUEST["year"] 
    kwargs['common_vehicle__year__year__exact'] = year 
    ....The rest of the vars are populated in the same way. 

Répondre

0

Voulez-vous à automatique ajouter les choix de l'utilisateur en tant que paramètres GET à l'URL?

Je ne pense pas que vous seriez en mesure d'ajouter des paramètres de requête GET à une URL via le middleware.

0

Vous pouvez les stocker dans GET, pas de problème là-bas. Retour via dict. Je n'ai pas compris la partie sur la préservation du choix de l'utilisateur - vous voulez avoir plusieurs options pour l'année, par exemple? Ensuite, vous avez besoin de tableaux dans GET, pas de valeurs. Mais pour les valeurs de son simple:

def get_choices(self): 
    user_choices = {} 
    for key in ["year", "model", "maker"]: 
     user_choices[key] = self.REQUEST.get(key) 
    return user_choices 
+0

Il est une vue de circonscrire la sélection d'un utilisateur à partir d'une grande base de données de véhicules ... afin que l'utilisateur commence par un choix, disons année, le dans la prochaine requête, si l'utilisateur sélectionne un style de corps spécifique, la requête combinera l'année précédemment sélectionnée avec le style de corps choisi ... et ainsi de suite ... Je pense que vous obtenez ce que je veux dire. Laissez-moi d'abord essayer votre réponse. – Stephen

+0

J'ai essayé le code ci-dessus ... ça ne marche pas pour moi. Voir mon édition pour la façon dont je l'ai fait ... idéalement, je veux que cela fonctionne comme django-pagination, par exemple, préserve la valeur paginate_by – Stephen

+0

Je ne vois aucune différence entre votre code et ma population dict :) Alors qu'est-ce qui ne fonctionne pas? – kibitzer