定位 django 应用程序资源

发布于 2024-09-16 04:25:28 字数 1027 浏览 4 评论 0原文

tl:dr

托管的 Django 应用程序如何正确转换资源路径以匹配任何托管位置(/ 或 /test 或 /testtest)?

完整描述

让我尝试解释一下我想要做什么。

我正在尝试编写一个可重用的 django 应用程序,我打算在多个项目中使用它。这个应用程序称为systemstatus

  • systemstatus 应用程序在“$^”下提供了一个页面,该页面提供了一个简单的界面来查询系统状态。
  • 此页面向 systemstatus 应用程序发出 ajax 查询,以确定实际的系统状态并将其报告在 UI 上。
  • systemstatus 应用程序提供了一个位置“^service/$”,它指向 ajax 调用处理程序。
  • 此页面必须以某种方式找出 ajax 处理程序的正确 URI,具体取决于此应用程序的托管位置(例如在 / 或 /status 或 /blahblah 下)。

我想知道这样做的理想方式是什么。我想说这也适用于应用程序内捆绑的其他资源(样式表、图像)。

现在我正在使用 request.path 来确定目标路径应该是什么。然后将该路径作为参数传递给模板。但这种方法很快就会变得太麻烦而难以处理。


def system_status (request):
    queryPath = request.path + "service/"
    return render_to_response ('systemstatus.html', {'queryPath': queryPath})

我的页面模板如下所示:


function do_ajax () {
    $.getJSON ('{{ queryPath }}', function (data) {
        $("#status").html (data.status);
    });
}

谢谢!

tl:dr

How would a hosted django app correctly transform resource paths to match any hosted location (/ or /test or /testtest)?

Full Description

Let me try to explain what I am trying to do.

I am trying to write a somewhat re-usable django app which I intend to use from within multiple projects. This app is called systemstatus.

  • The systemstatus app provides a page under '$^' which provides a simple interface to query the system status.
  • This page makes an ajax query back to the systemstatus app to determine the actual system status and report it on the UI.
  • The systemstatus app provides a location '^service/$' which points to the ajax call handler.
  • This page has to somehow figure out the correct URI for the ajax handler depending on where this app is hosted (e.g. under / or /status or /blahblah).

I am wondering what an ideal way of doing this would be. I would say that this applies to other resources bundled inside the app too (stylesheets, images).

Right now I am using request.path to determine what the target path should be. This path is then passed down as a parameter to the template. But this approach will soon become too cumbersome to handle.


def system_status (request):
    queryPath = request.path + "service/"
    return render_to_response ('systemstatus.html', {'queryPath': queryPath})

My page template looks like this:


function do_ajax () {
    $.getJSON ('{{ queryPath }}', function (data) {
        $("#status").html (data.status);
    });
}

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不顾 2024-09-23 04:25:28

您不应该像这样硬编码您的网址,而是使用 reverse 相反!

Django 还有内置模板标签 反转 url。所以你可以

function do_ajax () {
    $.getJSON ('{% url path.to.my_ajax_view %}', function (data) {
        $("#status").html (data.status);
    });
}

直接在你的模板中做类似的事情!

您还可以将 ajax 请求直接发送到当前页面的 url 并检查 是否是ajax请求

def my_view(request):
    if request.is_ajax():
        # generate response for your ajax script
    else:
        # generate the response for normal request
        # (render template of your page)

You shouldn't hardcode your urls like that, but use reverse instead!

Django also has a built-in template tag to reverse urls. So you could do something like

function do_ajax () {
    $.getJSON ('{% url path.to.my_ajax_view %}', function (data) {
        $("#status").html (data.status);
    });
}

directly in your template!

You can also send the ajax request directly to your current page's url and check if it is an ajax request or not:

def my_view(request):
    if request.is_ajax():
        # generate response for your ajax script
    else:
        # generate the response for normal request
        # (render template of your page)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文