Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2010 14:54:38

sinitsa
От:
Зарегистрирован: 2010-05-24
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ZODB Objects

Всем привет,

у меня вопрос по работе с объектами. Я пишу что то типа адресной книги на питоне. Добавление адреса отлично работает, а вот с удалением какие-то проблеммы…
При выборе объекта для удаления, в url добавляется его ключ в БД в переменную adress. Я вот так считываю: adresse=self.request.get('adress')

В чем моя ошибка? Объект не считывается.
Заранее спасибо



Офлайн

#2 Май 24, 2010 17:22:04

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

ZODB Objects

sinitsa
В чем моя ошибка? Объект не считывается.
И что хранится в переменной adresse?



Офлайн

#3 Май 24, 2010 22:34:17

sinitsa
От:
Зарегистрирован: 2010-05-24
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ZODB Objects

скорее всего эта переменная пустая, тк в if adresse: не выполняется.
Короче говоря, как мне считать URL а точнее какую-то его часть?



Офлайн

#4 Май 25, 2010 08:15:53

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

ZODB Objects

У объекта есть его имя в пределах контейнера. Оно же (в условиях стандартного поведения траверсера) и является последней частью его absolute_url. Оно находится в атрибуте __name__ объекта.

Вы можете взять __name__ объекта? (если нет, то это скорее недостаток дизайна. Можно, конечно взять из URL).

Тогда удалять так:

name = ob.__name__
del container[name]



Офлайн

#5 Май 25, 2010 10:08:58

sinitsa
От:
Зарегистрирован: 2010-05-24
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ZODB Objects

Да, у меня имя объекта

astoon
является последней частью его absolute_url. Оно находится в атрибуте __name__ объекта.
, но я не знаю какой объект выбрал пользователь.
Т.е. при выборе пользователем адреса для удаления, его имя записывается в url и вот как это имя считать и есть мой вопрос.



Отредактировано (Май 25, 2010 10:09:56)

Офлайн

#6 Май 25, 2010 11:20:48

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

ZODB Objects

sinitsa
Да, у меня имя объекта
astoon
является последней частью его absolute_url. Оно находится в атрибуте __name__ объекта.
, но я не знаю какой объект выбрал пользователь.
Т.е. при выборе пользователем адреса для удаления, его имя записывается в url и вот как это имя считать и есть мой вопрос.
Что именно в url ?

Может просто вызвать форму удаления на удаляемом объекте? Вот здесь такого пример удаления объекта в виде, вызванном на самом удаляемом объекте. Только там нужно добавить редирект (self.request.response.redirect('some_url')).

Если же вы хотите передать имя в параметре URL то сначала определитесь, как выглядит этот параметр URL. Что именно там? Откуда взято? Адрес - понятие растяжимое.



Офлайн

#7 Май 25, 2010 12:05:30

sinitsa
От:
Зарегистрирован: 2010-05-24
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ZODB Objects

Что касается вашего примера, я попробывала и у меня удаляются так все объекты, а не выбранный.
Про URL: при выборе объекта (radioButton нажатый рядом с выбранным объектом) в HTML файле в обработке нажатия radioButton к строке с адресом добавляется ключ, по которому можно найти данный объект:

code:[<input type=“radio” name=“group1” tal:attributes=“value python: s.name+s.vorname”
onclick=“document.location.href='adressbuch.html?adress='+this.value”>]

теперь, когда в строке url есть ключ, я хочу с этим объектом работать: изменять или удалять.
Как мне удалить именно этот объект?

Вот так выглядит url после выбора объекта:
http://localhost:8080/adressbuch/adressbuch.html?adress=SmithJohn



Офлайн

#8 Май 25, 2010 12:17:31

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

ZODB Objects

sinitsa
Что касается вашего примера, я попробывала и у меня удаляются так все объекты, а не выбранный.
Про URL: при выборе объекта (radioButton нажатый рядом с выбранным объектом) в HTML файле в обработке нажатия radioButton к строке с адресом добавляется ключ, по которому можно найти данный объект:

code:[<input type=“radio” name=“group1” tal:attributes=“value python: s.name+s.vorname”
onclick=“document.location.href='adressbuch.html?adress='+this.value”>]

теперь, когда в строке url есть ключ, я хочу с этим объектом работать: изменять или удалять.
Как мне удалить именно этот объект?

Вот так выглядит url после выбора объекта:
http://localhost:8080/adressbuch/adressbuch.html?adress=SmithJohn
Не знаю что такое s.vorname. Но предположим, что параметром adress Вы передаете имя объекта (у всех объектов, хранимых в контейнере, есть свое уникальное имя в пределах контейнера, оно же одновременно хранится (должно храниться, если объект реализует интерфейс zope.location.interfaces.ILocation) в его атрибуте __name__).

И предположим, что вид adressbuch.html имеет в качестве контекста контейнер, хранящий объект для удаления (говорится что вид вызывается на этом контейнере). Тогда удаляем так (кусок из адаптера вида):

name = self.request.get('adress')
del self.context[name]



Офлайн

#9 Май 25, 2010 12:58:12

sinitsa
От:
Зарегистрирован: 2010-05-24
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ZODB Objects

name = self.request.get('adress')
Этот код считывает переменную adress? она же будет типа string? именно так я и пыталась удалять объекты. После считывания я проверяла
if name:
del ...
но вот if не выполнялся, переменная name почему-то NonType
Почему такое может быть?

Имена объектов уникальныеи храняться в атрибуте __name__



Офлайн

#10 Май 25, 2010 13:23:57

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

ZODB Objects

sinitsa
но вот if не выполнялся, переменная name почему-то NonType
Почему такое может быть?
значит параметр запроса ‘adress’ не передан. Ищите ошибку.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version