【问题标题】:Using Django url as Ajax url使用 Django url 作为 Ajax url
【发布时间】:2021-01-04 16:05:50
【问题描述】:

我正在尝试通过 ajax 提交 django 表单,但收到以下错误消息: 顺便说一句,我的 urlpatterns 应该没问题,当我简单地渲染网站时它们可以正常工作。

jquery-3.5.1.js:10099 POST http://127.0.0.1:8000/%7B%%20url%20%22landing-home%22%20%%7D 404 (Not Found)

这是我的网址文件:

from django.urls import path
from Landing import views

urlpatterns = [
  path('', views.home, name='landing-home'),
]

我的 ajax 调用:

$(document).ready(function(){
console.log("Ready!");

const form = document.getElementById("form");
form.addEventListener("submit", submitHandler);

function submitHandler(e){
    e.preventDefault();
    $.ajax({
        type: 'POST',
        url: '{% url "landing-home" %}',
        data: $('#form').serialize(),
        dataType: 'json',
        
        success: function(data){
            if(data.msg == 'Success'){
                alert("Form is submitted!");
            }
        }

    })
}


})

【问题讨论】:

    标签: django ajax forms


    【解决方案1】:

    从您的代码中不清楚,但我猜您的 ajax 函数存储在专用的 javascript 文件中,而不是在调用它的模板中,是吗?

    如果是这样,问题就很清楚了:在 ajax 函数中,您使用 django 模板标签 来分配 url:{% url "landing-home" %}。模板标签在加载模板时由 django 评估。如果模板文件中不存在 ajax 函数,则该标签不能也不会被加载。你的 javascript 文件,假设你有一个并且你的 ajax 调用代码存在的地方,没有能力评估 django 模板标签。

    “简单”的解决方案是简单地将 ajax 函数移动到调用它的模板的底部,并将其放在 标记中。确保您的 javascript / jQuery 正确加载到您的基本模板中并扩展到将使用它的模板中。完成此操作后,模板标签将在加载模板时评估为正确的 URL,并解决您的特定错误。

    如果您希望将 ajax 函数保留在其自己的专用文件中,则需要创建一个解决方法来获取必要的 URL,而无需使用 django 模板标签。我对此没有直接的答案,但我相信我已经在 Stack Overflow 和其他地方的各种线程中看到过它,所以你应该对此进行一些研究。

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 2018-12-20
      • 2014-01-12
      • 2020-01-16
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多