bra*_*orm 3 javascript django variables
这是我的javascript代码,工作正常.但我喜欢保持javascript文件分离,不要用作内联脚本标记
<script>
$('.book').click(function() {
var id= $(this).attr('id');
data={
'id':id,
'csrfmiddlewaretoken':'{{ csrf_token }}',
};
$.ajax({
url: '/post/book/',
cache:'false',
dataType:'json',
type:'POST',
data:data,
success: function(data){
//do something
else {
//do something
}
},
error: function(error){
alert('error; '+ eval(error));
}
});
return false;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
我想在我的base.html中包含的custom.js文件中包含它.是的
{% load static from staticfiles %}
{% load bootstrap3 %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}{% endblock %}</title>
{% bootstrap_css %}
<!-- Optional theme -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
<link href="{% static "css/custom.css" %}" rel="stylesheet">
<!-- Latest compiled and minified JavaScript -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.js"></script>
<script src="{% static "js/custom.js" %}" ></script>
<script src="{% static "js/jquery.blockUI.js" %}"></script>
{% bootstrap_javascript %}
{% load bootstrap3 %}
{% load static from staticfiles %}
{% block content %} {% endblock %}
Run Code Online (Sandbox Code Playgroud)
我无法将csrf_tokenDjango中当前模板中可用的static js文件引用到该文件中.我怎么能让这个工作?
ayc*_*dee 12
如果你想引用模板标签,那么你需要Django模板化(渲染)该文件.我不建议通过django渲染所有静态文件...
您可以将csrf_token放在一个全局变量中,然后从脚本中访问该变量.你的base.html中有这样的东西:
<script>
var csrftoken = '{{ csrf_token }}';
</script>
Run Code Online (Sandbox Code Playgroud)
或者您可以从javascript文件中的cookie中提取csrftoken.请参阅此问题以获得解决方案.cookie被调用csrftoken.您可以通过打开开发工具并查看域名的Cookie来查看它.
您可以使用以下功能从客户端的“ csrftoken” cookie访问CSRF令牌:
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
Run Code Online (Sandbox Code Playgroud)
并像这样调用它:
getCookie('csrftoken');
Run Code Online (Sandbox Code Playgroud)
或者,您可以仅在HTML模板中定义一个变量,然后在客户端脚本中使用该变量。
<script>
var CSRF_TOKEN = '{{ csrf_token }}';
</script>
Run Code Online (Sandbox Code Playgroud)