Найти - Пользователи
Полная версия: обрабатываю запрос DTML и ошибка
Начало » Zope/Plone/Bluebream » обрабатываю запрос DTML и ошибка
1
NilovSerge
Всем привет
Подскажите пожалуйста. У меня в dtml-method-е строится список, беря данные из
ZMySql метода. Теперь мне нужно вывести этот список, но его элементы отсортировать в иерархии, что средствами SQL
я не сделаю. Я вызываю из своего dtml-method-а python-script из которого я вызываю свой sql-метод. Получаю массив данных.
На основе его строю свой массив. А теперь проблема в том, что вернув полученный массив не могу его обработать.
Делаю так:
get_data_select_organizations Script-(Python):
...
ResArray=[] # Этот массив я верну
result = context.sql.select_regions() # беру данные из Sql
ArrRegions = result.dictionaries()
L= len(ArrRegions)
for I in range(L):
    RegionId=ArrRegions[i]['regionID']
    RegionName=ArrRegions[i]['regionName']
    A={'id':0,'name':''} # это будет новая трока в моем массиве
    A['id']= RegionId
    A['name']= RegionName
    ResArray.append(A)  # Добавляю 1 строку запроса
...
#обработка данных
... 
return ResArray
Если вывести ResArray на экран то получается:

В dtml-е:
<dtml-in get_data_select_organizations>
  <option value="<dtml-var id>" <dtml-if expr="id==SESSION['organizationID']">SELECTED</dtml-if>  > <dtml-var name> </option>
</dtml-in>

и валится на “name”:KeyError: ‘name’ (Also, the following error occurred while attempting to render the standard error message, please see the event log for full details: ‘name’)
и заместо <dtml-var id> - пишет имя обьекта
Я попробовал вывести <dtml-var sequence-item> и получил на экран :{'id': 14L, ‘name’: ‘ BLUM EL’}
А до свойства ‘name’ я достучаться не смог. Можно ли такое сделать и как ?


Совет юзай ZTP а не DTML - хорош, но в данном случае не подходит. Там довольно большой кусок на dtml и он написан не мной.
Кстати в ZPT я так делал и все работает. Похоже в ZTP и DTML по разному организованные данные при обработке цикла?
albert
я точно не помню, но там должны быть махинации со знаками “-” или “.”. Что-то вроде того:
sequence-item-name
name-sequence-item
sequence-item.name
name.sequence-item
Или как-то так
albert
NilovSerge
Кстати в ZPT я так делал и все работает.
Так как там написано никогда работать не будет ни в ZPT, ни в DTML
NilovSerge
albert
Для dtml что-то вроде :

sequence-item-name
name-sequence-item
sequence-item.name
name.sequence-item

как написано в мануале - не работает. По крайней мере мне не удалось запустить…
А вот пример как я в скрипте сам создавал массив данных. Этот скрипт вызывается из ZPT. Это сейчас работает:
result = context.select_surveydata(survey_id=survey_id)
ResArray=
if result:
# There should be exactly one result
L= len( result.dictionaries() )

PagesCount= int(L/ItemsInPage)
ItemsLeft= int(L%ItemsInPage)
if ( ItemsLeft> 0 ):
PagesCount= PagesCount+1
resultDict = result.dictionaries()

FirstIndex= ItemsInPage*(PageNumber-1)
LastIndex= ItemsInPage*PageNumber
if ( LastIndex> L ):
LastIndex= L
for I in range( FirstIndex, LastIndex ):
A={'id':0,'name':''}
A= resultDict
A= resultDict
A= PageNumber
A= PagesCount
ResArray.append( A )

return ResArray
тут все просто. Просто я хочу запрос разбить на части и показать по номеру страницы.
А с dtml такой номер не прошел… И я не уловил разницы…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB