找到django app资源

时间:2010-08-30 01:42:41

标签: python django django-urls

TL:博士

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

完整描述

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

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

  • systemstatus应用在“$ ^”下提供了一个页面,该页面提供了一个查询系统状态的简单界面。
  • 此页面将ajax查询返回systemstatus应用程序以确定实际系统状态并在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);
    });
}

谢谢!

1 个答案:

答案 0 :(得分:2)

您不应该像这样对您的网址进行硬编码,而是使用reverse代替!

Django还有a built-in template tag来反转网址。所以你可以做类似

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

直接在你的模板中!

您也可以将ajax请求直接发送到当前页面的网址,然后选中if it is an ajax request

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)