2013-07-24 46 views
14

Wiadomym jest, że istnieje DRY sposób kierowania do adresu URL za pomocą django szablonu tag „URL”, powiedzmyGet wartość zmiennej JavaScript w Django szablonu url tagu

{% url "someview" arg1=X %} 

Tutaj chcę „X” być wartością zmiennej javascript, na przykład tmp. Ale poniższe nie działa

<script> 
    ...{% url "someview" arg1=tmp %}... 
</script> 

Jak mogę uzyskać wartość wewnątrz znacznika szablonu?

+0

Można spróbować: '{ % url "someview"%}? arg1 = tmp' – Marii

+1

Jesteś pewien, że to prawda? Wygląda na to, że jest błąd w gramatyce. –

+0

Przykro mi, zapomniałem, że 'tmp' jest zmienną javascript, więc: ' ' – Marii

Odpowiedz

33

znalazłem trick, który może pracować w większości przypadków:

var url_mask = "{% url 'someview' arg1=12345 %}".replace(/12345/, tmp.toString()); 

Jest czysty, i to nie łamie zasadę DRY.

+1

Schludny pomysł - warto zauważyć, że zadziała to tylko wtedy, gdy "arg1" może być numeryczne, a jeśli odwrócony adres URL nie zawiera innych wystąpień ciągu "/ 12345 /". –

+0

@DominicRodger wartość 12345 jest tylko symbolem zastępczym sortowania, jeśli odwrotny adres URL zawierał ten symbol zastępczy, wystarczy zmienić go na coś, czego nie ma. Dlaczego nie zadziała, jeśli arg1 nie będzie numeryczne? – guival

+0

Próbowałem tego, ale nic nie działa w moim przypadku, rozpoznaje adres URL przed zastąpieniem. "var url_mask =" {% url 'someview' pk = 12345%} ". replace (/ 12345 /," 1 ");" – jax

0

Nie sądzę, będziesz mógł korzystać nazwany argument {% url %} z JavaScript, ale można zrobić pozycyjną argumentu lub kwerendy parametr:

<script type="text/javascript"> 
    var tmp = window.location.hash, //for example 
     url = {% url '[url_name]' %} + tmp + '/'; 
</script> 

Ale można zrobić tylko raz , kiedy szablon jest początkowo renderowany.

+0

Tak, wymyślam podobne sztuczka. Coś jak var url_mask = "{% url 'someview' arg1 = 12345%}". Replace (/ 12345 /, tmp.toString()); –

+0

Cool. Zawsze możesz odpowiedzieć na własne pytanie, które jest korzystne dla innych, którzy patrzą na to pytanie w przyszłości. – Brandon

0

jeden prosty sposób, aby to zrobić jest

<div id="test" style="display: none;"> 
{% url 'some_url:some_sub_url'%} 
</div> 


<script> 
    url_mask = $("#test").html() 
</script> 
1

Tylko co jasne więc kolejny czytelnicy mogą mieć wszechstronne rozwiązanie. W odniesieniu do pytania, to jak kiedyś rozwiązanie Mike Lee dla przykładowego przypadku, który przekierowuje z JavaScript do nowej strony z parametrem w zmiennej o nazwie tmp:

window.location = "{% url 'your_view_name' 1234 %}".replace(/1234/, tmp.toString());