启用Django和Tastypie支持尾部斜杠?

时间:2012-05-11 17:28:00

标签: javascript django backbone.js tastypie

我的问题是Backbone正试图在最后用斜杠对URL做HTTP请求,如下所示:

:8000/api/v1/update/2/

出于某种原因,Django(或tastypie)最后不接受带斜杠的URL,因此上述URL不起作用,但此URL确实有效:

:8000/api/v1/update/2

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

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

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

  1. 如何更改骨干 - tastypie代码,以便最后没有AJAX调用附加斜杠?

  2. 如何制作Django / tastypie会将上述两个网址视为相同?

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

2 个答案:

答案 0 :(得分:7)

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

here

答案 1 :(得分: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同样适用。