URL reverse en Javascript avec django
source link: https://blog.mathieu-leplatre.info/url-reverse-en-javascript-avec-django-fr.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
URL reverse en Javascript avec django
Fri 27 May 2011Article original publié chez Makina Corpus
Un aspect fondamental de la philosophie django consiste à éviter toute sorte de redondance : Don't Repeat Yourself.
La tentation est souvent trop belle, et respecter les fondamentaux s'avère parfois difficile ! C'est le cas de la réécriture d'URL en Javascript.
Imaginons l'URL suivante définie dans urls.py
url(r'^/plop/(?P<x>\d)/(?P<y>\d)$', plopview, name="plop")
Pour utiliser cette URL en Javascript avec des paramètres variables, on peut imaginer plusieurs approches.
J'aime pas
var generic = "{% url 'plop' 0 0 %}"; generic.replace('0/0', x+'/'+y);
Pas DRY ! à cause des /.
"{% url 'plop' 0 0 %}" + '../../' + x + '/' + y;
Pas DRY non plus !
On peut aussi changer le pattern pour éviter les /.
url(r'^/plop/(?P<x>[\d]|x)/(?P<y>[\d]|y)$', , name="plop")
var generic = "{% url 'toto' 'x' 'y' %}"; generic.replace('x', x).replace('y', y);
C'est mieux, mais pas DRY ! à cause des x, y.
On pourrait aussi imaginer une vue django qui ferait le reverse(). Mais cela multiplierait les aller-retours serveur, ce qui n'est pas toujours recommandé...
La bonne
Il existe une application pour ça ! django-js-utils
Elle se charge de générer un fichier Javascript (settings.URLS_JS_GENERATED_FILE) grâce à une commande de gestion
python manage.js js_urls
Ensuite on utilise explicitement le fichier généré
<script type="text/javascript" src="{{ MEDIA_URL }}/js/dutils.js"></script> <script type="text/javascript" src="{{ MEDIA_URL }}/js/dutils.conf.urls.js"></script>
Et on fait du vrai DRY !
dutils.urls.resolve('plop', { 'x': x, 'y': y })
Gagné ! \o/
Un inconvénient à noter tout de même : la liste de l'ensemble des URLs de l'application est accessible au public. Mais j'ai pas mieux ma pauvre dame !
#django, #javascript - Posted in the Dev category
© Copyright 2020 by Mathieu Leplatre. mnmlist Theme
Content licensed under the Creative Commons attribution-noncommercial-sharealike License.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK