10
votes

Comment utiliser un nombre décimal dans un modèle d'URL Django?

J'aimerais utiliser un numéro avec un point décimal dans un modèle de Django URL, mais je ne suis pas sûr que ce soit réellement possible (je ne suis pas un expert de regex).

Voici ce que je veux utiliser pour URL: P>

/item/value/0.01
/item/value/0.05


0 commentaires

4 Réponses :


14
votes

Je ne sais pas sur Django spécifiquement, mais cela devrait correspondre à l'URL:

r"^/item/value/(\d+\.\d+)$"


4 commentaires

Si vous voulez avoir des intentes et flotte dans une URL , écrivez quelque chose comme ceci: r "^ / élément / valeur / (\ d + (?: \. \ D +)) $" / code>


+1 pour une réponse plus générique (non limitée aux numéros avec deux chiffres après décimal)


@Boldewyn ta solution ne fonctionne pas. Ni pour les intensors ni pour les flotteurs ... j'ai essayé de l'utiliser mais en vain


@ S.ali merci. Il y a un ? manquant: r "^ / élément / valeur / (\ d + (?: \. \ D +)?) $" - pour les flotteurs qu'il aurait dû travailler avant, cependant.



18
votes

Cela peut être quelque chose comme xxx

URL ne doit pas démarrer avec slash.

dans les vues Vous pouvez avoir la fonction: xxx


1 commentaires

Veuillez ne pas utiliser un nu sauf: car cela mange toutes les erreurs, cachent souvent des bugs. Vous voulez probablement juste attraper ValueError S ( à l'exception de ValueError: )



3
votes

Si les valeurs à accepter ne sont que 0,01 $ ou 0,05 $, le motif de Harto peut être spécifié comme celui-ci:

r"^/item/value/(\d\.\d{2})$"


1 commentaires

Merci, chaque message a ajouté un petit morceau de puzzle. Evgeny avait la balle magique.



1
votes

N'utilisez pas »
# Make sure you have defined Item model (this is just an example)
# You use your own model name
from .models import Item 

def show_item(request, dollar):
    try:
        # Convert dollar(string) to dollar(float).
        # Which gets passed to show_item() if someone requests 
        # URL patterns like /item/value/0.01, /item/value/1.22 etc.
        dollar = float(dollar);

        # Fetch item from Database using its dollar value
        # You may use your own strategy (it's mine)
        item = Item.objects.get(dollar=dollar);

        # Make sure you have show_item.html.
        # Pass item to show_item.html (Django pawered page) so that it could be 
        # easily rendered using DTL (Django template language).
        return render(request, "show_item.html", {"item": item});
    except:
        # Make sure you have error.html page (In case if there's an error)
        return render(request, "error.html", {});


1 commentaires

Grand fan de celui-ci. Comment créer r "^ élément / valeur / (? P \ d + \. \ D +) $" permettre une valeur négative?