听起来您需要在实际选择对象后进行额外的 ajax 调用。不要试图通过尝试在客户端计算出 url 来猜测你的 url.conf - 你以后只会给自己找麻烦。等到你能得到一个 pk,然后使用 django 的 reverse 函数给你你的 url(做任何其他事情都违反DRY)。
如何创建一个返回 url 的简单视图 -
from django.core.urlresolvers import reverse
from django.http import HttpResponse, HttpResponseBadRequest
def get_url(request):
if request.is_ajax() and request.method == 'POST':
obj_id = request.POST['obj_id']
url = reverse('object-update', kwargs{'pk': obj_id})
return HttpResponse(obj_id)
return HttpResponseBadRequest()
然后编写一个 javascript 函数,该函数使用对新视图的 ajax 调用获取 url,然后重定向。选择对象后,您将立即调用此函数。我建议使用 JQuery 来执行此操作,纯 javascript 将需要您编写更多代码,并且可能编写浏览器特定代码(取决于您的目标)。它还支持处理django 的 csrf 保护(如果还没有的话,你需要为 ajax 调用实现这个)。
var redirect = function(obj) {
$.ajax({
url: '/your-get-url-view/',
method: 'post',
data: {'obj_id': obj},
success: function(url){
window.location = url;
}
});
}
恐怕我不知道你是如何从选定的对象到 pk 的(为简单起见,我假设它对redirect
函数可用)——你可能需要在视图中进行一些处理才能到达那里。
我没有测试过上面的代码,但它应该让你对我的建议有所了解。