Py学习  »  Django

Ajax路由到django URL(使用django 2.0“path”urlpatterns)

Franchesca Yamiquemeimporta • 7 年前 • 2422 次点击  

这在Django2.0将url模式从“url”更改为“path”之前就已经起作用了:

索引文件

<!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)
    }
  })  
});

应用程序级URL.py

urlpatterns = [
  url(r'^all_json$',views.all_json, name="all_json")
  ]

项目级URL.py

app_name= "main"

urlpatterns = [
    path('', include ('apps.main.urls', namespace='main')),
    path('admin/', admin.site.urls),
]

VIEW

def all_json(request):
    return HttpResponse ('hello world!')

但是现在,django 2.0使用“path”而不是url regex模式。当我使用路径时:

app_name= "name"

urlpatterns = [
path('all_json',views.all_json, name="all_json"),
]

我得到:

得到 http://127.0.0.1:8000/main/all_json 404(未找到)

我看了看 new documentation release notes 还有一些答案可以解释如何使用它 SO post 1 和; SO post 2 . 到目前为止,这非常有用,因为我无法将URL从Ajax函数传递到“路径”。

我是Ajax的新手,我习惯于使用 {% url main:all_json %} 为了我的行为。但是对于Ajax,我相信我不能使用这个符号。对吗?

出于某种原因,我所用的例子 url(r'^$') Django2.0之前的urlpatterns工作正常,但现在我在使用“path”时得到一个代码404。大多数可用的问题和教程都是Django 2.0之前的版本并使用 URL(R′^ $) URL模式。发行说明和文档没有提到使用Ajax的区别。

我的问题如下:

我是否需要在我的模板和/或urls.py中添加其他内容来帮助它找到URL(去掉404)?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30689
文章 [ 2 ]  |  最新文章 7 年前
Yuriy Shevchenko
Reply   •   1 楼
Yuriy Shevchenko    7 年前

尝试构建这样清晰有用的API。使用 main , all_json 名字不清楚。不过,让我们来试试你的例子:

  1. 在你 urls.py 使用 main/all_json/ name="all_json" . 根据文件:

这里不需要添加一个前导斜杠,因为每个URL都有这个斜杠。例如,它的文章,而不是/文章。 link

…每个模式都要求URL以斜线结尾。 link

  1. 在您的HTML模板中(顺便说一下,这可能是错误的,但是您给它命名了 html.py . 我建议把这个重构为 somename.html ,在JS块中使用模板标记 {% url "all_json"" %} 像:

    $.ajax({
          url: '{% url "all_json" %}',
          sucess: function(serverResponse){
          console.log('success.serverResponse', serverResponse)
    }
    

    })

通过使用 url 模板标记在更改URL时可以避免许多错误。

Daniel Roseman
Reply   •   2 楼
Daniel Roseman    7 年前

第一, url 在Django 2.0中仍然完全有效。在以后的版本中,完全相同的功能与 re_path .

然而,问题并不存在。就是在新版本中添加了一个最后的斜线,以前没有。移除它:

path('all_json', ...)

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

url: 'main/all_json/',

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