[英]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.