首页 > 解决方案 > 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)吗?

标签: ajaxdjango

解决方案


首先,url在 Django 2.0 中仍然完全有效。在以后的版本中,可以使用与re_path.

但是,问题不存在。是你在新版本中添加了一个你以前没有的最后一个斜线。去掉它:

path('all_json', ...)

或者,最好将其添加到 Ajax 调用中:

url: 'main/all_json/',

最后请注意,由于 Ajax 脚本直接位于模板文件中,因此绝对可以在其中使用{% url %}标记。


推荐阅读