【问题标题】:NoReverseMatch js variables in django urldjango url中的NoReverseMatch js变量
【发布时间】: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 %}

标签: javascript django templates url d3.js


【解决方案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,您当然可以将其更改为您想要的任何内容。

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 2013-01-19
    • 2015-07-18
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2017-03-14
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多