7
votes

Django, exclure les paramètres de request.get

Quel est le meilleur moyen d'exclure les paramètres de request.get?

par exemple, étant donné un URL param ? A = A & B = B & C = C CODE> et je veux sortir PARAM B pour générer l'URL Param to ? A = A & C = C CODE> sans changement request.get code> p>

[P> Je suis en train de boucler les clés à sortir B P>

urllib.urlencode(request.GET.exclude('b'...)


0 commentaires

3 Réponses :


12
votes

Cela devrait fonctionner:

get = request.GET.copy()
del get['b']

params = urllib.urlencode(get)


4 commentaires

Nice, j'ai également pensé à utiliser cette approche aussi, mais je dois ensuite envelopper cela avec essayer de capturer des blocs en raison de paramètres incontrôlables.


Si vous voulez éviter Essayer / Catch, utilisez ma approche comme suit: x = cp.pop ('B', aucune), puis vérifier: si x n'est pas Aucun: ...


Cela ne fonctionne pas si vous avez plusieurs paramètres d'obtention de plusieurs noms. Par exemple? A = 1 & A = 2 & B = 3 & C = 4


C'est bien! À la dernière ligne get.urlencode () serait suffisant



2
votes

Vous ne pouvez pas manipuler le request.get code> directement car il s'agit d'un immutable code>. Donc, faites une copie peu profonde, puis retirez la clé souhaitée.

cp = request.GET.copy()
cp.pop('b')

params = urllib.urlencode(cp)


0 commentaires

1
votes

Toutes ces réponses ont presque raison, mais ont échoué pour le cas de bord où il existe plusieurs paramètres avec le même nom de clé, qui est valide (et toute la raison pour laquelle Django utilise un QueryDict et non un dict ). Si vous utilisez l'UrlenCode d'Urllib , il perdra les paramètres supplémentaires, vous devez utiliser l'URLenCode fourni par QueryDict .

https://docs.djangoproject.com/fr/dev/ref/request-Response/#django .http.querydict

QueryDict est une classe de dictionnaire personnalisée pour traiter plusieurs valeurs pour la même clé. Ceci est nécessaire car un formulaire HTML éléments, notamment , passe plusieurs valeurs pour la même clé.

Donc, la bonne voie est la suivante: xxx


0 commentaires