2015-04-10 4 views
0

Я использую django 1.8, Python 2.7.5, django-datatables-view 1.2 и datatables 1.10.6. При попытке использовать columndefs и columns.render я получаю следующее сообщение об ошибке:Python создать dict из списка списков

Предупреждение: Запрошенный неизвестно ...

Я посмотрел документацию по этому here и в основном разобрался, что DataTables не имеет ни малейшего представления о том, какие данные я являюсь потому что он не может его найти. Так что я смотрел на то, как был возвращаются данные:

{ 
    "recordsTotal": 176, 
    "recordsFiltered": 176, 
    "draw": 0, 
    "data": [ 
     [ 
      109, 
      "Hostname1", 
      "1.1.1.1", 
      "Excluded", 
      "Down" 
     ], 
     [ 
      116, 
      "Hostname2", 
      "2.2.2.2", 
      "Excluded", 
      "Up" 
     ], 
     ... 
    ], 
    "result": "ok" 
} 

Так что я работал с DataTables перед использованием PHP и для того, чтобы работать с колонкой Защиты вам нужен ключ: пары значений, так что вы можете определить "data": "Key" что, очевидно, это не. Я думаю, что я сузил, что строит готовые результаты этого:

def prepare_results(self, qs): 
    data = [] 
    for item in qs: 
     data.append([self.render_column(item, column) for column in self.get_columns()]) 
    return data 

Я не могу за жизнь мне понять, как преобразовать этот список списков в словарь, который возвращает результаты следующим образом:

{ 
    "recordsTotal": 176, 
    "recordsFiltered": 176, 
    "draw": 0, 
    "data": [ 
     { 
      "Rest Id": "109", 
      "Host Name": "Hostname1", 
      "Ip Address": "1.1.1.1", 
      "Mode": "Excluded", 
      "State": "Down" 
     }, 
     { 
      "Rest Id": "116", 
      "Host Name": "Hostname2", 
      "Ip Address": "2.2.2.2", 
      "Mode": "Excluded", 
      "State": "Up" 
     }, 
     ... 
    ], 
    "result": "ok" 
} 

Я понимаю, что я мог бы сделать то, что я пытаюсь сделать с Dict понимания, но я не могу понять способ получить его именно так, как я ищу, чтобы иметь выход вернулся. Я также должен полагать, что есть лучший способ сделать это, чем делать понимание по спискам после того, как он уже подготовлен. Любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

0

Я извиняюсь, но я вроде решил свою собственную проблему с помощью DataTables Javascript непосредственно вместо того, чтобы изменения в коде Python:

"columnDefs": [ 
    { 
     "targets": 0, 
     "data": 0, 
     "render": function (data, type, full, meta) { 
      return '<span data-clipboard-text="' + data + '">' + String(data) + '</span>' + 
      '<a href="URLICANNOTSHARE' + data + 
      'MOREOFTHEURLICANNOTSHARE" class="btn btn-info btn-xs" role="button" target="_blank" style="float:right;"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></a>'; 
      }, 
    }, 
    .... 
], 

Также я мозг fubar'd, что я говорил выше, и что я должен сказать, что по умолчанию DataTables ожидает объектов JavaScript (по крайней мере, каждый час, например, они ave показывает, что анализируемые данные - это объект), но то, что я возвращал, было массивом javascript (все еще работает, если у вас есть половина мозга, чего я не делал). Если вы оставите открытым, проверьте, может ли быть предоставлено решение python.

2

Предполагая, что ваши ДАННЫЕ являются в datas переменной, вы можете сделать следующее:

keys = ["Rest Id", "Host Name", "Ip Address", "Mode", "State"] 
datas["data"] = [dict(zip(keys, d)) for d in datas["data"]] 
+0

Когда я пытаюсь добавить эту функцию perpare_results выше, она сообщает мне, что 'global name 'datas' не определен'. Когда я пытаюсь добавить список полей и возвращать '[dict (zip (keys, d)) для d в data [" data "]]' он говорит мне, что индексы списка должны быть целыми числами, а не str' – beardedeagle

+0

Что такое переменная, которая содержит все данные, которые вы напечатали в своем вопросе? – FunkySayu

+0

Это должны быть только «данные». См. [Здесь] (https://bitbucket.org/pigletto/django-datatables-view/src/d816956c433d3e0cd3392632759cdb6b7867e394/django_datatables_view/base_datatable_view.py?at=master#cl-174) Линии 174-240, где происходит магия, но данные выглядят так, как будто они подготовлены в функции 'prepare_results'. – beardedeagle

Смежные вопросы