如何通过jQuery在POST请求中传递动态URL?

时间:2015-01-12 22:03:56

标签: ajax django

我正在尝试这样做:

<script>
 $(document).ready(function() {
    $(".delete_button").click(function() {
        var id = $(this).attr('id');
        $.ajax({
            type: "POST",
            url: "/accounts/{{ request.user.username }}/profile_listview",
            data: { entryname:id },
            success: function(response){
                alert(response.success);
            }
        });
        return false;
    });
});
</script>

但我需要找到一个传递动态URL的解决方案,因为Django模板变量在这种情况下不起作用。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:3)

如果您需要传递的变量始终相同(如request.user.username对于一个用户将始终相同),您可以渲染一个javascript对象,其中包含您构建网址所需的所有选项。

<script type="text/javascript">
    var __MYAPP_CONFIG__ = {
      username: JSON.stringify({{ request.user.username }})
    };
</script>

然后,在您的脚本中,您可以通过访问my_app.username来获取动态部分。

$.ajax({
    # ...
    url: "/accounts/" + window.__MYAPP_CONFIG__.username + "/profile_listview",
    # ...
});

我喜欢这种方法的是它(在我看来)为随时间增长的项目提供了相当通用的结构。对于足够大的网站,我最终会得到一个配置对象,其结构类似my_project.my_app1.optionsmy_project.my_app2.options等。这样,所有可能需要它的应用程序都是命名空间,我有一个中心位置知道找到我的选择。

答案 1 :(得分:3)

也许您可以使用html5的数据属性,例如:

<a class="delete_button" ... data-url="{% url 'my_url_name' username=request.user.username %}">Delete</a>

这样,更干嘛。

然后,在脚本中,您将该数据用作要发布到的URL:

$.ajax({ type: "POST", url: $(this).data('url'), data: { entryname:id }, success: function(response){ alert(response.success); } });