Django:JavaScript 中的反向参数化 url

mig*_*jek 3 javascript django

假设我的一个 urlpatterns 看起来像这样。

url('^objects/update/(?P<pk>\d+)$', views.UpdateView.as_view(), name = 'update-object'),

我需要根据所选对象将用户重定向到更新页面(对象列表是使用 Ajax 填充的)。所以我想将命名的 url模式传递给 JavaScript,以便在客户端构建实际的 url。

我想要实现的目标的示例:

  1. 将名称传递'update-objects'给函数
  2. 获取实际的 url 模式,替换(?P<pk>..){pk}
  3. 将结果传递给 javascript,结果是:objects/update/{pk}

有小费吗?谢谢


更清楚地说:在渲染时,我无法进行 url 反转,因为 PK 还不知道。我需要制作一种 javascript-urlpattern ,稍后将其转换为真实的 url (即我的 JS 代码将用实际的 pk 值替换 {pk} 部分)

acj*_*jay 5

实际的 URL 反转必须发生在服务器端。有多种方法可以做到这一点,其中最优雅的方法可能取决于为此设置的脚本和标记的准确程度。我最近做的一件事是使用 HTML5 数据属性将 URL 附加到逻辑元素,这些属性可以使用 jQuery 轻松检索。如果您不使用 jQuery,我将让您自行翻译为纯 JS。您还没有为您的客户端提供任何代码或细节,所以我有点在黑暗中拍摄,但这也许会给您带来想法:

Django HTML 模板:

<ul class="object-list">
 {% for object in objectList %}
  <li data-update-url="{% url update-objects object.pk %}">object.name</li>
 {% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)

JS:

$('.object-list').on('click', 'li' function () {
  var updateUrl = $(this).data('update-url')
  ...
});
Run Code Online (Sandbox Code Playgroud)