Если Вы даете Вашей таблице уникальный идентификатор, его более легкое:
<div id="ctl00_ContentPlaceHolder1_Jobs_dlItems_ctl01_a"
onmouseup="checkMultipleSelection(this,event);">
<table id="ctl00_ContentPlaceHolder1_Jobs_dlItems_ctl01_a_table"
cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td style="width:50px; text-align:left;">09:15 AM</td>
<td style="width:50px; text-align:left;">Item001</td>
<td style="width:50px; text-align:left;">10</td>
<td style="width:50px; text-align:left;">Address1</td>
<td style="width:50px; text-align:left;">46545465</td>
<td style="width:50px; text-align:left;">ref1</td>
</tr>
</table>
</div>
var multiselect =
document.getElementById(
'ctl00_ContentPlaceHolder1_Jobs_dlItems_ctl01_a_table'
).rows[0].cells,
timeXaddr = [multiselect[0].innerHTML, multiselect[2].innerHTML];
//=> timeXaddr now an array containing ['09:15 AM', 'Address1'];
В этой строке:
if value is not None and not value.has_key():
значение
представляет собой строку в Юникоде. Похоже, код ожидает, что это будет db.Model
,
(Из того, что я вижу, has_key
- это метод db.Model
], а также метод словарей Python, но это должен быть метод db.Model
, потому что он вызывается без аргументов.)
Передаете ли вы строку в API GAE, который ожидает db.Model
?
Ваша проблема в том, что postedcountry - это строка, а не объект страны. Значения, полученные из self.request.get, представляют собой строковые значения переменных, передаваемые браузером.
Вам нужно найти объект страны с помощью некоторого GQL. То, как именно вы это сделаете, будет зависеть от того, что именно возвращает поле страны вашей HTML-формы, ключ объекта ?, название страны?
def post(self):
postedcountry = self.request.get('country')
# <-------- Need to look up a country here !!!!!
cmsRequest = models.CMSRequest(country=postedcountry)
Поскольку никто еще не ответил на этот бит:
Кортеж? (или как там это называется?)
Слово «кортеж» происходит от математики. В математике мы можем говорить о (упорядоченных) парах, если мы делаем 2d геометрию. Переход к трём измерениям означает, что нам нужны тройки. В более высоких измерениях нам нужны четверки, пятерки и, ммм, любой префикс для шести и так далее. Это становится проблемой, и математики также любят обобщать («давайте сегодня поработаем с n измерениями!»), Поэтому они начали использовать термин «n-tuple» для упорядоченного списка из n элементов (обычно чисел).
После этого немного естественной лени - все, что вам нужно, чтобы отбросить «n-», и мы получим кортежи.
s лучше тестировать свои контейнеры с помощью оператора Python in
(который неявно вызывает __ contains __ ()
--- и который работает со списками, строками и другими последовательностями, а также с типами сопоставления) .
Также value.has_key ()
вызовет ошибку, даже если value
был словарем, поскольку метод .has_key ()
требует аргумента.
В вашем коде я бы либо явно проверил для , если значение postcountry не равно None:
..., либо снабдил бы ваш .get ()
(необязательным) значением по умолчанию для " отправленная страна ".
Как вы хотите справиться с ситуацией, когда запрос
не имеет отправленную страну ? Вы хотите это предположить? отправляется из какого-то конкретного значения по умолчанию? Принудительно перенаправить на какую-то страницу, которая требует, чтобы пользователь указал значение для этого элемента формы? Предупредить испанскую инквизицию?
Вы пытаетесь установить строку в ReferenceProperty. Поле «страна» в CMSCountry - это db.ReferenceProperty, которое принимает объект db.Key или CMSCountry, но вы пытаетесь установить его в виде строки.
Вы должны сделать что-то вроде этого:
def post(self):
postedcountry = self.request.get('country')
country = models.CMSCountry.all().filter('name =', postedcountry)
if not country:
# Couldn't find the country
else:
cmsRequest = models.CMSRequest(country=country)
Однако, пожалуйста, сообщите об ошибке , связанной с довольно бесполезным сообщением об ошибке.
Если вы прочитаете трассировку, она точно скажет вам, что происходит:
if value is not None and not value.has_key():
AttributeError: 'unicode' object has no attribute 'has_key'
Это означает, что используемая вами переменная value
не имеет атрибута has_key
. И он говорит вам, что ваша переменная value
не является словарем, поскольку похоже, что вы ожидаете ... вместо этого это объект Unicode, который по сути является строкой.