Django:AJAX和路径参数

时间:2016-09-12 10:15:06

标签: python json ajax django

我试图弄清楚如何在Django中传递一个特定的js文件来生成AJAX请求。

假设我们有一个带有映射到特定视图的路径参数的URL:

url(r'^post/(?P<post_id>\d+)/$', TemplateView.as_view('post.html'))

然后post.html包含一个执行AJAX请求以获取JSON的帖子的脚本:

post.html

<script src="{{ STATIC_URL }}/js/post.js"></script>
<div id="post-container"></div>

这可能是js文件。让我们说这样做是因为post(作为JSON)需要在js插件中使用,以特定的方式显示它。

post.js

$.ajax({
   url: '/post/??post_id??',
   contentType: 'application/json'
})
.done(function(post_data) {
    togglePlugin(post_data);
});

我主要担心的是如何从js文件中找出post_id是为了进行适当的调用。

这些部分通常如何在Django中连接?我所谈论的部分是网址,路径参数,视图和ajax。

2 个答案:

答案 0 :(得分:0)

您可以将post_id变量传递给django模板。 但是,如果您不希望它“受到伤害”,请将您的.js代码(脚本)放在由django呈现的html文件中。所以你可以使用django模板标签。

例如:

        var url = "/post/{{post_id}}";
         $.ajax({
            type: 'POST',
            url: url,
            dataType: 'json',
            data: {
                some_field: field_data,
                some_other_field: field_data
            },
            success: function(data) {
                do_something();
            },
            error: function(data) {
                do_somethin();
            }
        });

答案 1 :(得分:0)

要从模板中获取网址,您应该使用{% url %}模板标记,因为您应该为网址添加名称:

url(r'^post/(?P<post_id>\d+)/$', TemplateView.as_view('post.html'), name='my_name)

然后在您的can模板中以这种方式调用该网址{% url 'my_name' object.pk %},请参阅this了解详情。

当您使用js的不同文件,并且想要传递django变量时,您应该在导入js文件之前声明<script>,然后声明您的变量:

<srcipt>var foo={{django_var}}</script>
<script src="{{ STATIC_URL }}/js/post.js"></script>

然后在js。

中使用变量foo