姜戈 |动态 URL 中的 JS 变量

Posted

技术标签:

【中文标题】姜戈 |动态 URL 中的 JS 变量【英文标题】:Django | JS variable inside dynamic URL 【发布时间】:2021-07-02 18:26:48 【问题描述】:

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

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

我可以根据我在 html 中选择的任务(使用 AJAX 和 Django-REST 框架完成)来检索我创建的“任务”字段(id、标题、描述...)。但是,我在动态 url 中呈现 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 的模板标签

【问题讨论】:

【参考方案1】:

在搜索了很多之后,这是我找到的最好的整洁的解决方案(也是唯一一个):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 );

【讨论】:

【参考方案2】:

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

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

干净,不违反 DRY 原则。

【讨论】:

谢谢,binpy。这个解决方案似乎不起作用,它似乎干扰了我的 javascript。我正在使用 Django REST Framework 来更新一些值,但似乎没有工作。我找到了一个使用 django-js-urls 的解决方案(贴在下面)

以上是关于姜戈 |动态 URL 中的 JS 变量的主要内容,如果未能解决你的问题,请参考以下文章

姜戈。如何将下一个变量传递给 auth_views.login

django url中的NoReverseMatch js变量

href 怎么传递js中的变量

如何返回上一页,但不计算js中的url变量

url 变量中的斜线

Crystal Report通过变量传递图像URL时未显示动态图像