En option paramètres get dans django?
Quelqu'un peut-il expliquer comment vous pouvez écrire un modèle d'url et de vue qui permet paramètres facultatifs? J'ai fait cela avec succès, mais j'ai toujours casser le modèle d'url de la balise.
Voici ce que j'ai actuellement:
Modèle
(r'^so/(?P<required>\d+)/?(?P<optional>(.*))/?$', 'myapp.so')
Vue
def so(request, required, optional):
Si j'utilise l'url de la balise de modèle dans cet exemple, fournissant à la fois des arguments, il fonctionne très bien; cependant, si je omettez l'argument optionnel, je reçois une inversion erreur.
Comment puis-je y arriver?
Grâce,
Pete
- Il est sur la feuille de route pour 1.3: code.djangoproject.com/ticket/14772
Vous devez vous connecter pour publier un commentaire.
En général, je fais deux modèles avec un nommé url:
Django url sont polymorphes:
son obious que vous avez à faire votre point de vue comme ceci:
de sorte que vous pouvez l'appeler avec le même nom et qu'il allait travailler url du travail de résolution fine. Cependant, soyez conscient que vous ne pouvez pas passer Aucun comme argument requis et s'attendent à ce que vous arriver à la regexp sans argument:
Mal:
Correct:
Je ne sais pas si cela est documenté nulle part - je l'avoir découvert par hasard - j'ai oublié de réécrire l'url noms et il a été de travailler de toute façon 🙂
Autres ont démontré la façon de gérer cela avec deux distincts nommé URL modèles. Si la répétition de la partie du modèle d'URL qui vous dérange, il est possible de se débarrasser de lui en utilisant include():
Puis ajouter un required_urls.py fichier:
Normalement, je ne considère pas cette peine, sauf si il y a un préfixe commun pour un certain nombre d'Url (certainement plus que deux).
patterns
pour éviter de devoir créer un nouveau fichier:url(r'...', include(patterns('', url(...), url(...))))
. Voir iciPourquoi ne pas avoir deux modèles:
Pour quelqu'un qui est toujours à avoir ce problème.
J'utilise Django 1.5 (mis à jour: à l'aide de 1,8) et il marche encore très bien.
J'utilise:
urls.py
Puis quand je veux avoir les deux url
et
J'utilise:
Cela va créer de l'url
Si vous créez une url manuellement, vous devez garder la /dans l'esprit.
Je hoop cela permet à tout le monde!
dans views.py vous faites quelque chose de simple.
Et quand vous ne soyez pas facultatif param dans la chaîne d'url, il sera nul dans votre code.
Simple et élégant 🙂
url.py
& ne trouverez pas de modèle qui correspond à l'url. Que ce est dansviews.py
et ne fonctionnera pas jusqu'à ce que d'après un modèle est trouvéSelon votre cas d'utilisation, vous pouvez simplement passer un paramètre de l'url comme ceci:
appel dans votre vue:
ce sera le retour de 'foo'