簡體   English   中英

Django URL中的NoReverseMatch js變量

[英]NoReverseMatch js variables in django url

我正在嘗試在django {%url%}中傳遞js變量,但是沒有成功。 我建立了一個D3條形圖,我想將每個條形圖鏈接到由django呈現的不同頁面。 這些頁面運行良好,當我推送靜態數據(所有條形圖到同一頁面)時,它運行良好。 我應該如何添加js變量?

謝謝!

您不能: {% url %}標記的結果在服務器端編譯,但是javascript在客戶端運行。

您可以使用AJAX端點來提供{% url %}標簽的功能。 創建一個運行reverse()的視圖,並在JSON響應中返回結果。 然后,您可以將參數傳遞給它,並使用Javascript對結果進行處理。 一個非常簡單的例子:

urls.py

url(r'^posts/(?P<pk>\d+)$', 'app.views.post', name='post_view'),
url(r'^url$', 'app.views.url_endpoint_view', name='url_endpoint')

views.py

import json
from django.http import HttpResponse

def url_endpoint_view(request):
    name = request.GET.pop('name')
    data = {'url': reverse(name, kwargs=request.GET)}
    return HttpResponse(json.dumps(data), content_type='application/json')

模板:

<a href="#" id="post_link">Dynamic link to a post</a>

JavaScript:

$.get('/url?name=post_view&pk=5', function(data) {
    $('#dynamic_link').attr('href', data.url)
});

我有同樣的問題,我發現替換可以解決這個問題。 這是我的示例代碼:

const html = matches.map(match => 
`<a href="{% url 'case' 9999 %}"class="btn btn-primary btn-block">More Info</a>`.replace(/9999/,match.pk)).join('');

我總結了代碼以防止泛濫,但您可以猜測這部分的作用。 首先為每個匹配項輸入/ case / 9999,然后將其替換為主鍵中的ID,因此將其轉換為/ case / 1,/ case / 3等。

如果您有可能將9999作為ID,則可以將其更改為您想要的任何值。

暫無
暫無

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

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