更改站点 URL 后找不到 Django 应用程序请求

Django app request not found after changing site URLs

我有一个网页在启动时执行异步请求以获取 JSON 文件:

controller.js

$.ajax(    
    {
        url: '/get_lines/',
        data_type: 'json',
        success: function(data) 
        {
            fillLinesMenu(JSON.parse(data))
            $("#form-lines option:eq(1)").attr("selected","selected");
            $("#form-lines").selectmenu("refresh")
        }
    }
)

project/field_plot/urls.py

urlpatterns = [
    url(r'^get_lines/$', views.get_lines, name='get_lines'),
    url(r'^get_plot/$', views.get_plot, name='get_plot'),
    url(r'', views.index, name='index'),
]

project/urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('sky_map/', include('sky_map.urls')),
    path('', include('field_plot.urls')),
]

这已经运行了很长一段时间了。如您所见,我一直在研究 field_plot - 因此空 url,以简化页面加载 - 但现在我需要将此应用程序分配给其特定的项目级别 URL :

project/urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('sky_map/', include('sky_map.urls')),
    path('field_plot/', include('field_plot.urls')),
]

现在我需要按预期加载 http://localhost:8000/field_plot/,但更改最后一个路径会中断 /get_lines/ 和我用于 AJAX 请求的其他 URL。我错过了什么?

在您的 javascript 请求中使用 url 名称,https://docs.djangoproject.com/en/3.1/topics/http/urls/#examples

$.ajax(    
    {
        url: "{% url 'get_lines' %}",
        data_type: 'json',
        success: function(data) 
        {
            fillLinesMenu(JSON.parse(data))
            $("#form-lines option:eq(1)").attr("selected","selected");
            $("#form-lines").selectmenu("refresh")
        }
    }
)

您的 url 已从 /get_lines/ 更改为 /field_plot/get_lines/。在 javascript 中与 Django 一起使用 urls 的最佳方法是 render 模板中某处的 url 作为属性并获取它使用 javascript.

模板中的某处(理想情况下,这将是某个按钮或将触发 ajax 请求的东西,为了举例,我只使用带有 id 的 div ):

<div id="my-url-div" data-url="{% url 'get_lines' %}"></div>

现在在您的 javascript 中:

url: $("#my-url-div").data('url'),