Gracias a todos por todas las respuestas. Estoy usando Django 1.5.1. Llego un poco tarde a la fiesta, pero aquí va.
Encontré que el enlace al Django project era muy útil, pero realmente no quería tener que incluir el código JavaScript adicional cada vez que quería hacer una llamada Ajax.
Me gusta la respuesta de jerrykan, ya que es muy breve y solo agrega una línea a una llamada Ajax normal. En respuesta a los comentarios que aparecen debajo de su comentario sobre situaciones en las que las etiquetas de plantilla de Django no están disponibles, ¿qué le parece cargar el archivo csrfmiddlewaretoken del DOM?
var token = $('input[name="csrfmiddlewaretoken"]').prop('value');
jQuery.ajax({
type: 'POST',
url: url,
data: { 'csrfmiddlewaretoken': token },
dataType: 'json',
success: function(data) { console.log('Yippee! ' + data); }
});
EDITAR de marzo de el año 2016
Mi acercamiento a este problema en los últimos años ha cambiado. Agrego el código a continuación (desde Django docs) a un archivo main.js y lo cargo en cada página. Una vez hecho esto, no debería tener que preocuparse por el token CSRF con ajax nuevamente.
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 = jQuery.trim(cookies[i]);
// 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;
}
var csrftoken = getCookie('csrftoken');
http://stackoverflow.com/questions/5100539/django-csrf-check-failing-with-an-ajax-post-request –