我试图弄清楚如何在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。
答案 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