【问题标题】:Locating django app resources定位 django 应用程序资源
【发布时间】:2010-08-30 01:42:40
【问题描述】:

tl:dr

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

完整说明

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

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

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

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

现在我正在使用 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);
    });
}

谢谢!

【问题讨论】:

    标签: python django django-urls


    【解决方案1】:

    你不应该这样硬编码你的网址,而是使用reverse

    Django 也有 a built-in template tag 来反转 url。所以你可以做类似的事情

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

    直接在您的模板中!

    您也可以将ajax请求直接发送到您当前页面的url并检查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)
    

    【讨论】:

    • 天哪!这听起来很完美。我会试一试,看看我能不能让它工作。也感谢您提供的方便提示。有没有办法在 django 模板(正在处理模板的那个)中指定当前视图的 url,所以我可以说 {% url path.to.my_ajax_view %} 而不是说 {% current_view %} 并且当前视图的 url 被放置在那里。还是和使用request.path一样?
    • 工作就像一个魅力!再次感谢!
    • 我认为使用request.path 没有任何缺点!如果有人更了解它,请告诉我。或使用{% url path.to.system_status_view %}
    猜你喜欢
    • 1970-01-01
    • 2010-10-16
    • 2019-11-05
    • 2020-03-01
    • 2017-12-03
    • 2012-06-09
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多