定位 django 应用程序资源
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不应该像这样硬编码您的网址,而是使用 reverse 相反!
Django 还有内置模板标签 反转 url。所以你可以
直接在你的模板中做类似的事情!
您还可以将 ajax 请求直接发送到当前页面的 url 并检查 是否是ajax请求:
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
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: