簡體   English   中英

在 Django url 模板標簽中獲取 javascript 變量的值

[英]Get javascript variable's value in Django url template tag

眾所周知,有一種使用 django 模板標簽“url”定向到 URL 的 DRY 方式,例如

{% 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 原則。

只是說清楚,以便下一位讀者可以有一個全面的解決方案。 關於這個問題,這是我如何將 Mike Lee 解決方案用於示例案例,該案例使用 Javascript 重定向到一個新頁面,該頁面的參數位於名為tmp的變量中:

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

一種簡單的方法是

<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);

使用concat而不是replace類似解決方案,因此您可以避免id沖突:

var pre_url = "{% url 'topology_json' %}";
var url = pre_url.concat(tool_pk, '/', graph_depth, '/');

但是你需要一個非參數的 url 來讓 Django 愉快地使用pre_url因為加載時間評估,我的urls.py是:

urlpatterns = [
    url(r'^topology_json/$',
        views.topology_json,
        name='topology_json'),
    url(r'^topology_json/(?P<tool_id>[0-9]+)/(?P<depth>[0-9]+)/$',
        views.topology_json,
        name='topology_json'),
    ...
]

並且 view 中的參數有合適的默認值,所以views.py

def topology_json(request, tool_id=None, depth=1):                                             
    """                                                                                        
    JSON view returns the graph in JSON format.                
    """                                                                                        
    if tool_id:                                                                                
        tool = get_object_or_404(Tool, pk=tool_id)                                             
        topology = get_graph(str(tool), int(depth))                                            
    else:
        ...      

Django 1.11 在這里。

我認為您不能在 JavaScript 中使用命名參數{% url %} ,但是您可以使用位置參數或查詢字符串參數:

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

但是,您只能在最初呈現模板時執行一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM