在单击事件中调用 javascript 内的 django url
Call django urls inside javascript on click event
我在模板中得到了一个 javascript onclick 事件,我想用它的 id 参数调用我的 Django url 之一,如下所示:
$(document).on('click', '.alink', function () {
var id = $(this).attr('id');
document.location.href ="{% url 'myapp:productdetailorder' id %}"
});
当然这根本不起作用。有什么想法吗?
提前致谢!!
您正在尝试访问 javascript 变量,该变量是在用户单击后端 Django 模板中的前端时创建的。但是,您已经知道这是行不通的。
更好的选择是在 javascript 中重建 url:
$(document).on('click', '.alink', function () {
// Generate URL without "id" bit
var url = "{% url 'myapp:productdetail' %}";
var id = $(this).attr('id');
// Construct the full URL with "id"
document.location.href = url + "/" + id;
});
如果你没有一个 django url 助手可以 return 你需要的 URL,你可以打印出任何一个并简单地在 [=18 中替换它=] 像这样:
$(document).on('click', '.alink', function () {
var url = "{% url 'myapp:productdetail' 123 %}";
var id = $(this).attr('id');
// Construct the full URL with "id"
document.location.href = url.replace('123', id);
});
问题似乎在于您在 js 静态文件中使用了 django 模板语言(对吗?)
尝试将该变量移动到 html 模板文件,例如:
<script type=text/javascript>
var a = "{% url'myapp:productdetail' id %}" </script>
在静态 js 文件中:
document.location.href = a;
我认为最好的方法是创建一个 html data-*
属性,并在模板中呈现 URL,然后使用 javascript 检索该属性.
这样可以避免将 js/django 模板内容混合在一起。此外,我将所有 JS 保存在视图之外的单独文件中(通常这是一种更好的做法),因此尝试混合使用这两者是行不通的。
例如,如果您有想要的 url,只需创建一个 html 隐藏元素:
<input type="hidden" id="Url" data-url="{% url 'myapp:productdetail' id %}" />
然后,在你的 JS 中:
$(document).on('click', '.alink', function () {
var url = $("#Url").attr("data-url");
});
我经常将这种模式用于下拉列表,这样我就不必在第一次呈现页面时提供所有选项(这通常会加快速度)。
您可以使用 javascript 代码“window.location.origin”,这将给出基础 url,然后您可以添加“/pathname”
你不需要通过任何这些...
写。
location.href = "/" + id
就这些了。
我在模板中得到了一个 javascript onclick 事件,我想用它的 id 参数调用我的 Django url 之一,如下所示:
$(document).on('click', '.alink', function () {
var id = $(this).attr('id');
document.location.href ="{% url 'myapp:productdetailorder' id %}"
});
当然这根本不起作用。有什么想法吗?
提前致谢!!
您正在尝试访问 javascript 变量,该变量是在用户单击后端 Django 模板中的前端时创建的。但是,您已经知道这是行不通的。
更好的选择是在 javascript 中重建 url:
$(document).on('click', '.alink', function () {
// Generate URL without "id" bit
var url = "{% url 'myapp:productdetail' %}";
var id = $(this).attr('id');
// Construct the full URL with "id"
document.location.href = url + "/" + id;
});
如果你没有一个 django url 助手可以 return 你需要的 URL,你可以打印出任何一个并简单地在 [=18 中替换它=] 像这样:
$(document).on('click', '.alink', function () {
var url = "{% url 'myapp:productdetail' 123 %}";
var id = $(this).attr('id');
// Construct the full URL with "id"
document.location.href = url.replace('123', id);
});
问题似乎在于您在 js 静态文件中使用了 django 模板语言(对吗?) 尝试将该变量移动到 html 模板文件,例如:
<script type=text/javascript>
var a = "{% url'myapp:productdetail' id %}" </script>
在静态 js 文件中:
document.location.href = a;
我认为最好的方法是创建一个 html data-*
属性,并在模板中呈现 URL,然后使用 javascript 检索该属性.
这样可以避免将 js/django 模板内容混合在一起。此外,我将所有 JS 保存在视图之外的单独文件中(通常这是一种更好的做法),因此尝试混合使用这两者是行不通的。
例如,如果您有想要的 url,只需创建一个 html 隐藏元素:
<input type="hidden" id="Url" data-url="{% url 'myapp:productdetail' id %}" />
然后,在你的 JS 中:
$(document).on('click', '.alink', function () {
var url = $("#Url").attr("data-url");
});
我经常将这种模式用于下拉列表,这样我就不必在第一次呈现页面时提供所有选项(这通常会加快速度)。
您可以使用 javascript 代码“window.location.origin”,这将给出基础 url,然后您可以添加“/pathname”
你不需要通过任何这些...
写。
location.href = "/" + id
就这些了。