使用Django url作为 AJAX url

dzjeubhm  于 2023-04-22  发布在  Go
关注(0)|答案(2)|浏览(146)

我试图通过 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)

这是我的URL文件:

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

    })
}

})
xqkwcwgp

xqkwcwgp1#

从你的代码中看不清楚,但我猜你 AJAX 函数存储在一个专用的javascript文件中,而不是在调用它的模板中,是吗?
如果是这样,问题就很清楚了:在 AJAX 函数中,你使用了一个django模板标签来分配url:{% url“landing-home”%}.模板标签在模板加载时由django评估。如果 AJAX 函数不存在于模板文件中,则该标签不能也不会被加载。您的javascript文件,假设您有一个并且那是您的ajax调用代码存在的地方,没有能力评估django模板标签。
简单的解决方案是将 AJAX 函数移到调用它的模板的底部,并将其放在标记中< script >。确保您的javascript / jQuery正确加载到基本模板中,并扩展到将使用它的模板中。完成此操作后,模板标记将在加载模板时评估为正确的URL,并解决特定的错误。
如果你想把 AJAX 函数保存在它自己的专用文件中,你需要创建一个解决方案来获取必要的URL,而不使用django模板标签。我没有一个直接的答案,但我相信我已经在Stack Overflow和其他地方的各种线程中看到了它,所以你应该做一些研究。

qncylg1j

qncylg1j2#

一个非常简单的解决方法是在 AJAX 请求中这样写url:

url : 'yourURL'

是否使用/取决于您的配置。

相关问题