Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JavaScript调用Django视图_Javascript_Html_Django - Fatal编程技术网

从JavaScript调用Django视图

从JavaScript调用Django视图,javascript,html,django,Javascript,Html,Django,假设我正在编写一个web应用程序,网上商店出售古董硬币,我有一个HTML组合框(),选择后(比如,我选择了“gold”只列出金币),我想重定向到特定的Django视图,我该如何做?我的猜测是JavaScript,但我不确定如何正确构造指向所需Django视图的URL 目前我是这样做的: var combobox = document.getElementById('category-combobox'); combobox.addEventListener('change', spam); ​

假设我正在编写一个web应用程序,网上商店出售古董硬币,我有一个HTML组合框(
),选择后(比如,我选择了“gold”只列出金币),我想重定向到特定的Django视图,我该如何做?我的猜测是JavaScript,但我不确定如何正确构造指向所需Django视图的URL

目前我是这样做的:

var combobox = document.getElementById('category-combobox');
combobox.addEventListener('change', spam);
​
function spam() {
    window.location.replace("/shop/search/?q=" + combobox.value);
}

我只是想知道是否有比手动对URL进行harcoding更好的方法,您可以使用Jinja logic定义一个URL,使用正在呈现的模板中的脚本标记重定向到该URL。然后在JS中,您可以捕获选择框的状态更改,获取其值并将其存储在名为
params
的变量中,然后附加适当的
以表示
url参数,然后重定向到该页面。我希望你明白我的意思

file.html

<select id="category">
    <option value="gold">Gold</option>
    <option value="silver">Silver</option>
</select>
<script>
    var PAGE_URL = "{% url 'appname:urlname' %}"
</script>
<script src="file.js" type="text/js"></script>

您可以使用Jinja逻辑定义要重定向到的URL,该URL使用正在呈现的模板中的脚本标记。然后在JS中,您可以捕获选择框的状态更改,获取其值并将其存储在名为
params
的变量中,然后附加适当的
以表示
url参数,然后重定向到该页面。我希望你明白我的意思

file.html

<select id="category">
    <option value="gold">Gold</option>
    <option value="silver">Silver</option>
</select>
<script>
    var PAGE_URL = "{% url 'appname:urlname' %}"
</script>
<script src="file.js" type="text/js"></script>
解决办法是使用

步骤1:使用
pip安装

pip install django-js-reverse
步骤2:将
'django\u js\u reverse'
添加到
settings.py中的
已安装的应用程序中

INSTALLED_APPS = [
    'django_js_reverse',
]
from django_js_reverse.views import urls_js

urlpatterns = [
    path('jsreverse/', urls_js, name='js_reverse'),
]
第三步:
url.py

INSTALLED_APPS = [
    'django_js_reverse',
]
from django_js_reverse.views import urls_js

urlpatterns = [
    path('jsreverse/', urls_js, name='js_reverse'),
]
步骤4:在模板中包含
js\u reverse

<script src="{% url 'js_reverse' %}" type="text/javascript"></script>
解决办法是使用

步骤1:使用
pip安装

pip install django-js-reverse
步骤2:将
'django\u js\u reverse'
添加到
settings.py中的
已安装的应用程序中

INSTALLED_APPS = [
    'django_js_reverse',
]
from django_js_reverse.views import urls_js

urlpatterns = [
    path('jsreverse/', urls_js, name='js_reverse'),
]
第三步:
url.py

INSTALLED_APPS = [
    'django_js_reverse',
]
from django_js_reverse.views import urls_js

urlpatterns = [
    path('jsreverse/', urls_js, name='js_reverse'),
]
步骤4:在模板中包含
js\u reverse

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

就像其他URL一样。你哪里有问题?@DanielRoseman我不知道如何正确构造它,也就是说,我必须手动硬编码。与什么相反?请显示一些代码。您需要一个url,您希望在其中获得pk,用户选择的东西的类型。这些应该是一个关系的记录,select将包括标签和pk作为一个值,就像金币一样。select需要一个更改侦听器,然后将用户重定向到预定义的url,添加pk。请记住,您可以以/开头形成url,因此不必指定域名,url将指向创建该链接的同一个域。@DanielRoseman我添加了一些代码。所以我在寻找类似于
reverse()
的东西,但如果这有意义的话,可以从JavaScript中找到。就像其他URL一样。你哪里有问题?@DanielRoseman我不知道如何正确构造它,也就是说,我必须手动硬编码。与什么相反?请显示一些代码。您需要一个url,您希望在其中获得pk,用户选择的东西的类型。这些应该是一个关系的记录,select将包括标签和pk作为一个值,就像金币一样。select需要一个更改侦听器,然后将用户重定向到预定义的url,添加pk。请记住,您可以以/开头形成url,因此不必指定域名,url将指向创建该链接的同一个域。@DanielRoseman我添加了一些代码。因此,我正在寻找类似于
reverse()
的东西,但如果这有意义的话,可以从JavaScript中找到。