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/9​​999,但随后将 9999 替换为主键中的 id,因此它被转换为 /case/1、/case/3 等...

如果您有可能将 9999 作为 id,您当然可以将其更改为您想要的任何内容。

【讨论】:

以上是关于django url中的NoReverseMatch js变量的主要内容,如果未能解决你的问题,请参考以下文章

django url中的name参数怎么理解

刷新 django 中的 urls.py 缓存

django app中urls怎么获取主urls中的链接

django中的自定义登录URL

django-registration 中的 Urls 配置

比较 Django 模板中的 url