ajax - AJAX 路由到 Django URL(使用 Django 2.0“路径”urlpatterns)
问题描述
在 Django 2.0 将 url 模式从“url”更改为“path”之前,这曾经有效:
索引.html
<!DOCTYPE html>
{% load static %}
<head>
<script type="text/javascript" src="{% static 'main/js/jquery-3.3.1.js' %}">
</head>
<body>
<div id='test'>
<p><button class="btn">Click Here!</button></p>
</div>
<script>
$('.btn').click(function(){
console.log('button is clicked!')
$.ajax({
url: 'main/all_json',
sucess: function(serverResponse){
console.log('success.serverResponse', serverResponse)
}
})
});
APP 级 urls.py
urlpatterns = [
url(r'^all_json$',views.all_json, name="all_json")
]
项目级 urls.py
app_name= "main"
urlpatterns = [
path('', include ('apps.main.urls', namespace='main')),
path('admin/', admin.site.urls),
]
视图.py
def all_json(request):
return HttpResponse ('hello world!')
但是现在,Django 2.0 使用“路径”而不是 url 正则表达式模式。当我使用路径时:
app_name= "name"
urlpatterns = [
path('all_json',views.all_json, name="all_json"),
]
我得到:
获取http://127.0.0.1:8000/main/all_json 404(未找到)
我查看了新文档和发行说明,有一些 SO 答案解释了如何使用它SO post 1 & SO post 2。到目前为止,这一直很有用,我无法将 url 从 AJAX 函数传递到“路径”。
我是 AJAX 的新手,我习惯于{% url main:all_json %}
在 Django 中使用。但是对于 AJAX,我相信我不能使用这种表示法。那正确吗?
出于某种原因,我url(r'^$')
在 Django 2.0 之前使用 urlpatterns 的示例工作,但现在使用“路径”时我得到一个代码 404。大多数可用的问题和教程都是 Django 2.0 之前的版本并使用url(r'^$')
urlpatterns。发行说明和文档没有提到任何关于使用 AJAX 的差异。
我的问题如下:
我需要在我的模板和/或 urls.py 中添加其他内容来帮助它找到 url(摆脱 404)吗?
解决方案
首先,url
在 Django 2.0 中仍然完全有效。在以后的版本中,可以使用与re_path
.
但是,问题不存在。是你在新版本中添加了一个你以前没有的最后一个斜线。去掉它:
path('all_json', ...)
或者,最好将其添加到 Ajax 调用中:
url: 'main/all_json/',
最后请注意,由于 Ajax 脚本直接位于模板文件中,因此绝对可以在其中使用{% url %}
标记。
推荐阅读
- flutter - Flutter 模糊键盘样式
- python - 安装失败:pipenv install google-ads (TypeError: expected string or bytes-like object)
- ide-customization - 有没有办法为 Faktor-IPS 扩展属性自定义输入元素?
- git - github没有用intellij登录
- spring - 如何在新的 Spring Boot 2.4 中迁移 kubernetes 配置
- c++ - 是否存在某些情况下 boost::function 不能被 std::function 替代?
- ios - 防止iOS在登录后刷回登录页面或销毁登录页面
- docker - 从我的本地机器连接到 docker localhost 端口
- c# - putasynch 不成功
- c# - 相同根标签的“将 xml 粘贴为类”时重复的“System.SerializableAttribute”属性