4

我的问题是 Backbone 正在尝试对末尾带有斜杠的 URL 执行 HTTP 请求,如下所示:

:8000/api/v1/update/2/

由于某种原因,Django(或tastepie)不接受末尾带有斜杠的URL,所以上面的URL 不起作用,但这个URL 确实有效:

:8000/api/v1/update/2

当不使用其覆盖的同步时,Backbone-tastypie 回退到 oldSync,这是 Backbone 附带的原始同步。我相信当 Backbone-tastypie 使用 oldSync 时,它会在 URL 的末尾附加一个斜杠,这是我不想要的。

建议的大多数解决方案都在处理我遇到的相反问题。他们正在尝试解决尾部斜杠起作用的问题,但没有尾部斜杠不起作用。

除了非尾随斜杠之外,我还需要能够支持尾随斜杠。这可以通过两种方式解决:

  1. 如何更改骨干美味代码,以便没有 AJAX 调用在末尾附加斜杠?

  2. 如何使 Django/tastypie 将上述两个 URL 视为相同?

其中任何一个都可以解决我的问题,但我无法弄清楚如何实现其中任何一个。

4

2 回答 2

7

你可以告诉 Tastypie/Django 允许或禁止尾部斜杠。

这里

于 2012-05-12T15:56:26.123 回答
5

解决Backbone方案:

您可以覆盖 的默认行为Model.url,甚至使用普通行为并进行小修改,如您正在寻找的行为:

// code simplified and not tested
var MyModel: Backbone.Model.extend({
  url: function() {
    var original_url = Backbone.Model.prototype.url.call( this );
    var parsed_url = original_url + ( original_url.charAt( original_url.length - 1 ) == '/' ? '' : '/' );

    return parsed_url;
  }
});

同样适用于Collection.

于 2012-05-11T17:51:52.837 回答