2010-03-25 15 views
1

Je n'arrive pas à obtenir une partie d'une URL avec la balise {% url %}.Django: Recherche d'une partie de l'URL d'une vue en utilisant {% url%}

La configuration URL contient ceci:

url("^delete/(?P<uuid>[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/$", 
    deleteView, 
    name = "delete"), 

qui signifie supprimer un élément par son UUID (la vue prend un paramètre « uuid » comme vous pouvez le voir). Comme je ne souhaite pas modifier tous les modèles lorsque les mappages d'URL changent, j'utilise des URL nommées ("delete" dans cet exemple).

Ensuite, dans le modèle, je veux accéder à cette URL via AJAX mais j'ai besoin de fournir le paramètre UUID en utilisant JavaScript, donc j'ai juste besoin de la partie /delete/ de l'URL. Ma solution actuelle est la suivante:

uuid = "some uuid that should be deleted on the server"; 

$.get("{% url myinstancenamespace:delete "00000000-0000-0000-0000-000000000000" %}" 
     .replace("00000000-0000-0000-0000-000000000000", uuid), 
     function(data) 
{ 
    // process server response 
}, "text"); 

Cela ressemble plus à un hack pour moi. Alors, y a-t-il de meilleures solutions que celle-ci?

Répondre

1

Cela ne me semble pas complètement hack, je dois dire.

Mais si vous ne voulez vraiment pas le faire comme cela, une option serait de rendre le paramètre uuid facultatif dans l'URLconf, en le préfixant avec ?:. Bien sûr, vous devrez alors faire un peu plus de validation dans la vue pour vous assurer que vous avez réellement eu un uuid.

+0

Ensuite, je devrais reparse l'URL dans la vue, ce qui conduit à un autre endroit qui doit connaître l'URLconf. Donc, c'est un autre (plus grand) hack IMO. – AndiDog

+0

Pas du tout. L'uuid serait toujours passé en paramètre, mais la signature de la fonction serait 'def deleteView (requête, uuid = None):' et vous auriez juste besoin de cocher 'if uuid is None'. –

+0

Pourriez-vous s'il vous plaît modifier votre réponse pour inclure la regex complète, je pense que je ne comprends pas exactement ce que vous voulez dire (ne fonctionne pas la façon dont j'interprète votre réponse;). – AndiDog