I think the best way to do this is to create a html data-*
attribute with the URL rendered in a template and then use javascript to retrieve that.
This way you avoid mixing js/django template stuff together. Also, I keep all of my JS in a separate file outside the view (which is a much better practice in general), and therefore trying to mix these two won't work.
For instance, if you have a url you want, just create an html hidden element:
<input type="hidden" id="Url" data-url="{% url 'myapp:productdetail' id %}" />
Then, in your JS:
$(document).on('click', '.alink', function () {
var url = $("#Url").attr("data-url");
});
I frequently use this pattern for dropdown lists so that I don't have to serve all of the options when I first render the page (and this usually speeds it up).
id
referenced inside the Django template tags is not the same one in the javascript. Using Django templating within javascript generally makes for inelegant code, but it sounds like what you're wanting to do is essentially perform string concatenation in the javascript. Think of the Django tags as a function returning a string, and write the corresponding javascript to concatenate. – Chandlery