Ответ 1
Я нашел трюк, который может работать в большинстве случаев:
var url_mask = "{% url 'someview' arg1=12345 %}".replace(/12345/, tmp.toString());
Он чист, и он не нарушает принцип DRY.
Известно, что существует суровый способ обращения к URL-адресу с помощью тега-шаблона django "url", скажем
{% url "someview" arg1=X %}
Здесь я хочу, чтобы "X" было значением переменной javascript, например tmp
. Но следующее не работает.
<script>
...{% url "someview" arg1=tmp %}...
</script>
Как мне получить значение внутри тега шаблона?
Я нашел трюк, который может работать в большинстве случаев:
var url_mask = "{% url 'someview' arg1=12345 %}".replace(/12345/, tmp.toString());
Он чист, и он не нарушает принцип DRY.
Просто дайте понять, что у следующих читателей может быть комплексное решение. Что касается вопроса, так я использовал решение Майка Ли для примера, который перенаправляется с Javascript на новую страницу с параметром в переменной с именем tmp:
window.location = "{% url 'your_view_name' 1234 %}".replace(/1234/, tmp.toString());
Я не думаю, что вы сможете использовать именованный аргумент в {% url %}
из JavaScript, однако вы можете сделать параметр позиционного аргумента или querystring:
<script type="text/javascript">
var tmp = window.location.hash, //for example
url = {% url '[url_name]' %} + tmp + '/';
</script>
Но вы могли бы сделать это только один раз, когда шаблон сначала будет отображаться.
один простой способ сделать это -
<div id="test" style="display: none;">
{% url 'some_url:some_sub_url'%}
</div>
<script>
url_mask = $( "#test" ).html()
</script>
var name = "{% url 'your_view_name' pk=0 %}".replace('0', name_variable);