【问题标题】:Django | JS variable inside dynamic URL姜戈 |动态 URL 中的 JS 变量
【发布时间】: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 的模板标签

【问题讨论】:

    标签: javascript django django-rest-framework django-urls


    【解决方案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 的解决方案(贴在下面)
      猜你喜欢
      • 2020-08-17
      • 2017-10-02
      • 2015-12-15
      • 1970-01-01
      • 2015-07-18
      • 2011-01-27
      • 2016-01-06
      • 2014-06-02
      • 1970-01-01
      相关资源
      最近更新 更多