姜戈 |动态内的 JS 变量 URL

Django | JS variable inside dynamic URL

我正在尝试使用 Django 在动态 url 中传递一个 javascript 变量。我有以下路径

path('task-update/<str:pk>/', updateTask, name='task-update'),

我能够检索我创建的“任务”字段(id、标题、描述等),具体取决于我在 HTML 中 select 执行的任务(已完成使用 AJAX 和 Django-REST 框架)。但是,我在渲染动态 urls

中的 javascript 值时遇到了一些问题
var url = `{% url 'task-update' pk=${activeItem.id} %}`

${activeItem.id} 是我遇到麻烦的地方,我尝试将它分配给一个变量并将其传递到 URL但它不起作用。

我一直在使用的解决方法是

var url = `http://127.0.0.1:8000/task-update/${activeItem.id}/`

但是我想使用 django 的模板标签

我发现了一个在大多数情况下都可行的技巧:

var url = "{% url 'task-update' pk=12345 %}".replace(/12345/, ${activeItem.id});

很干净,没有违反 DRY 原则。

经过大量搜索后,这是我找到的最简洁的解决方案(也是唯一一个):django-js-urls.

只需 pip install django-js-urls 并将 'js_urls' 添加到您的 INSTALLED APPS.

之后只需将 JS_URLS 添加到您的 settings.py 文件中,然后输入您要添加的路径名称好想用。在我的例子中,我只添加了 task-update,它看起来像这样

JS_URLS = (
    'task-update',
)

然后,您需要做的就是在 URLs 根模块中添加以下内容

from js_urls.views import JsUrlsView

urlpatterns = [
    # other urls
    url(r'^js-urls/$', JsUrlsView.as_view(), name='js_urls'),
]

并在模板中包含以下js

<script src="{% url 'js_urls' %}" type="text/javascript"></script>

可以通过 window.reverse 函数使用 URL

var url = window.reverse('task-update', { pk: activeItem.id });