2010-09-14 5 views
30

En supposant que j'ai une vue 'get_item', comment écrire le modèle d'URL pour le style d'URL php suivant?Django et paramètres de chaîne de requête

http://example.com/get_item/?id=2&type=foo&color=bar 

(je ne suis pas en utilisant le standard type d'URL-à-dire « nice »: http://example.com/get_item/2/foo/bar comme il est pas pratique)

Plus précisément, comment puis-je faire, je fais la répondre de vue lorsque les types d'utilisateurs ci-dessus dans un navigateur, et comment puis-je collecter les paramètres et l'utiliser à mon avis?

J'ai essayé d'obtenir au moins la partie id mais en vain. La vue ne fonctionne pas quand je tape dans mon navigateur http://example.com/get_item?id=2

Mon modèle url:

(r'^get_item/id(?P<id>\d+)$', get_item) 

Mon point de vue:

def get_item(request): 
    id = request.GET.get('id', None) 
    xxxxxx 

En bref, comment puis-je mettre en œuvre le style de Php d'url pattern avec les paramètres de chaîne de requête dans django?

+0

que diriez-vous d'une plus belle URL get_item/2/foo/bar, et correspondent à cela? Nous pourrions donc avoir get_item/2/pants/red. – dotty

Répondre

17

Vous avez juste besoin de changer votre modèle d'URL pour:

(r'^get_item/$', get_item) 

Et votre code de vue fonctionnera. Dans Django, la correspondance de modèle d'URL est utilisée pour le chemin réel et non pour la chaîne de requête.

45

Faites votre modèle comme celui-ci:

(r'^get_item/$', get_item) 

Et à votre avis:

def get_item(request): 
    id = int(request.GET.get('id')) 
    type = request.GET.get('type', 'default') 

Bien que pour des vues de détail normales, etc. vous devez mettre l'identifiant/limace dans l'url et non dans la chaîne de requête! Utilisez les paramètres get, par exemple. pour filtrer une vue de liste, pour déterminer la page en cours etc ...

+3

Merci pour les réponses. Je comprends maintenant. Pas besoin d'utiliser re pour répondre aux params dans urls.py. Collectez simplement les paramètres dans les vues à l'aide de request.Get.get() – Ben

Questions connexes