【问题标题】:Django app request not found after changing site URLs更改站点 URL 后未找到 Django 应用程序请求
【发布时间】:2021-03-26 18:02:08
【问题描述】:

我有一个网页在启动时执行异步请求以获取 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。我错过了什么?

【问题讨论】:

标签: python django django-urls


【解决方案1】:

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

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

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

现在在你的 javascript 中:

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

【讨论】:

  • 成功了,谢谢!!!但是有更清洁的解决方案吗?为什么我不能就地呈现 URL(例如,不声明单独的 div)?
  • 因为 JavaScript 在另一个文件中(不是直接在模板中)。事实上,我相信这是一个比直接在 JavaScript 中渲染更简洁的解决方案。 (一个脚本写另一个脚本?恶意黑客进行 XSS 攻击的空间很大)
【解决方案2】:

在您的 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")
        }
    }
)

【讨论】:

  • 可悲的是,它似乎不起作用...控制台显示:[26/Mar/2021 18:15:45] "GET /field_plot/%7B%%20url%20'get_lines'%20%%7D HTTP/1.1" 200 9233
  • 嗯...现在似乎 URL 正在与最后一个路径匹配,这让我得到了页面的 HTML。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2018-09-15
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多