django url中的NoReverseMatch js变量
Posted
技术标签:
【中文标题】django url中的NoReverseMatch js变量【英文标题】:NoReverseMatch js variables in django url 【发布时间】:2014-01-31 05:10:46 【问题描述】:我试图在 django % url % 中传递 js 变量,但没有成功。 我构建了一个 D3 条形图,我想将每个条链接到由 django 呈现的不同页面。页面运行良好,当我推送静态数据(所有条到同一页面)时,它运行良好。我应该如何添加js变量?
谢谢!
【问题讨论】:
你见过this question吗? 我正在尝试做相反的事情:将 js 变量值放入 django 模板 url 标签 % url 'some_page' js_variable % 那么this question 应该会有所帮助。 谢谢,但我正在尝试将它传递到 % url 'some_page' js_variable % 【参考方案1】:你不能:% 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)
);
【讨论】:
谢谢!承认这一点非常令人失望。我通过使用 JS if 语句列表解决了它。【参考方案2】:我遇到了同样的问题,我发现替换可以解决这个问题。这是我的示例代码:
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,但随后将 9999 替换为主键中的 id,因此它被转换为 /case/1、/case/3 等...
如果您有可能将 9999 作为 id,您当然可以将其更改为您想要的任何内容。
【讨论】:
以上是关于django url中的NoReverseMatch js变量的主要内容,如果未能解决你的问题,请参考以下文章