.row
  %table.effective-datatable.table-striped.table-bordered{:id => "#{datatable.to_param}-table", :data => {'effective-datatables-table' => true, 'source' => datatable_path(datatable, :format => 'json'), 'filter' => datatable_filter(datatable), 'non-sortable' => datatable_non_sortable(datatable), 'non-visible' => datatable_non_visible(datatable)}}
    %thead
      - max_depth = datatable.table_columns.map { |_, opts| opts[:th][:depth].to_i rescue 0 }.max
      - [*0..max_depth].each do |depth|
        %tr
          - table_columns = datatable.table_columns.select { |_, opts| (opts[:th][:depth] || 0 rescue 0) == depth }
          - table_columns.each do |name, opts|
            %th{(opts[:th] || {}).merge({:title => opts[:label] || name})}= opts[:label] || name
            - (opts[:append_th] || []).each do |faux_col|
              %th{(faux_col[:th] || {}).merge({:title => faux_col[:label]})}= faux_col[:label]
    %tbody

%table.effective-datatable.table-striped.table-bordered.table-condensed{:id => "#{datatable.to_param}-table", :data => {'effective-datatables-table' => true, 'source' => datatable_path(datatable, :format => 'json'), 'filter' => datatable_filter(datatable), 'non-sortable' => datatable_non_sortable(datatable), 'non-visible' => datatable_non_visible(datatable)}}
  %thead
    - max_depth = datatable.table_columns.map { |_, opts| opts[:th][:depth].to_i rescue 0 }.max
    - [*0..max_depth].each do |depth|
      %tr
        - table_columns = datatable.table_columns.select { |_, opts| (opts[:th][:depth] || 0 rescue 0) == depth }
        - table_columns.each do |name, opts|
          %th{(opts[:th] || {}).merge({:title => opts[:label] || name})}= opts[:label] || name
          - (opts[:append_th] || []).each do |faux_col|
            %th{(faux_col[:th] || {}).merge({:title => faux_col[:label]})}= faux_col[:label]
  %tbody

Remove .row wrapping div from render_datatable()
Remove .row wrapping div from render_datatable()
