NojverseMatch js变量在django url中

时间:2014-01-12 12:30:01

标签: javascript django templates url d3.js

我正在尝试在django {%url%}中传递js变量,但没有成功。 我构建了一个D3条形图,我希望将每个条形链接到由django呈现的不同页面。页面运行良好,当我推送静态数据(所有条形图到同一页面)时,它运行良好。我该如何添加js变量?

谢谢!

2 个答案:

答案 0 :(得分:0)

你不能:{% 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)
});

答案 1 :(得分:0)

我遇到了同样的问题,我发现替换可以解决此问题。这是我的示例代码:

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,则可以将其更改为您想要的任何内容。