我正在尝试在django {%url%}中传递js变量,但没有成功。 我构建了一个D3条形图,我希望将每个条形链接到由django呈现的不同页面。页面运行良好,当我推送静态数据(所有条形图到同一页面)时,它运行良好。我该如何添加js变量?
谢谢!
答案 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,则可以将其更改为您想要的任何内容。