Django:AJAX和路径参数

2024-04-26 20:43:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图弄清楚如何在Django中传递一个特定的js文件,该文件发出AJAX请求。在

假设我们有一个url,其路径参数映射到特定视图:

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

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

^{pr2}$

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

post.js

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

我主要关心的是如何从js文件中找出post_id是什么,以便进行适当的调用。在

在Django,这些部件通常是如何连接的?我所说的部分是url、路径参数、视图和ajax。在


Tags: 文件django路径脚本视图idjsonurl
2条回答

您可以将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();
            }
        });

若要从模板中获取url,应使用{% url %}模板标记,为此,应向url添加名称:

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

然后在您的can模板中以这种方式调用该url {% 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。在

相关问题 更多 >