【问题标题】:Django: Finding part of a view's URL using {% url %}Django:使用 {% url %} 查找视图 URL 的一部分
【发布时间】:2011-01-31 19:18:41
【问题描述】:

我无法仅获取带有 {% url %} 标记的 URL 的一部分。

网址设置包含以下内容:

url("^delete/(?P<uuid>[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/$",
    deleteView,
    name = "delete"),

这意味着通过它的 UUID 删除一个项目(如你所见,视图采用参数“uuid”)。由于我不想在 URL 映射更改时更改所有模板,因此我使用命名 URL(在本例中为“删除”)。

然后在模板中,我想通过 AJAX 访问该 URL,但需要使用 JavaScript 提供 UUID 参数,所以实际上我只需要 URL 的 /delete/ 部分。我目前的解决方案是这样的:

uuid = "some uuid that should be deleted on the server";

$.get("{% url myinstancenamespace:delete "00000000-0000-0000-0000-000000000000" %}"
      .replace("00000000-0000-0000-0000-000000000000", uuid),
      function(data)
{
    // process server response
}, "text");

这对我来说更像是一种黑客行为。那么,还有比这更好的解决方案吗?

【问题讨论】:

    标签: django django-templates django-urls


    【解决方案1】:

    我必须说,这听起来并不完全是骇人听闻的。

    但如果您真的不想那样做,一种选择是在 URLconf 中将 uuid 参数设为可选参数,方法是在其前面加上 ?: 前缀。当然,您需要在视图中进行更多验证,以确保您确实有一个 uuid。

    【讨论】:

    • 然后我将不得不重新解析视图中的 URL,这会导致另一个必须知道 URLconf 的地方。所以这是另一个(更大的)hack IMO。
    • 一点也不。 uuid 仍将作为参数传入,但函数签名将是 def deleteView(request, uuid=None):,您只需检查 if uuid is None
    • 您能否编辑您的答案以包含完整的正则表达式,我想我不明白您的意思(与我解释您的答案的方式不同;)。
    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 2019-08-17
    • 2019-01-25
    • 2019-04-27
    • 2013-10-30
    • 2017-06-15
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多