Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Май 16, 2007 18:26:33

NilovSerge
От:
Зарегистрирован: 2007-02-15
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

Привет!
Подскажите такое. Как в странице ZPT проверить что переданный request-параметр есть целое, строка или список?
Средствами ZPT или Python ?



Офлайн

#2 Май 16, 2007 19:28:16

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

В зрт нема функції type, може якась інша подібна є. Найлегше мені здається то буде так зробити: написати пітонівську функцію, якій передати значення, а вона поверне тип, в окремому модулі, яку виклкати на сторінці. То буде виглядати так:

<div tal:define="xtype python:modules['Products.myProduct.utils'].xtype">
    <span tal:content="python:xtype(request.val)"/>
</div>
і функція в utils.py:
import types
def xtype(val):
    t = type(val)
    if t == types.StringType:
        return "tstring"
    elif t == types.ListType:
        return "tlist"
    elif t == types.IntType:
        return "tinteger"



Отредактировано (Май 17, 2007 19:51:07)

Офлайн

#3 Май 16, 2007 21:15:59

NilovSerge
От:
Зарегистрирован: 2007-02-15
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

Спасибо, это то что мне нужно.



Офлайн

#4 Май 16, 2007 21:46:42

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

Ше така штука, може не знаєш. В продукті в __init__.py треба додати таке:

from AccessControl import allow_module
allow_module('Products.myProduct.utils')



Офлайн

#5 Май 17, 2007 19:04:45

NilovSerge
От:
Зарегистрирован: 2007-02-15
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

Не получилось
на строке

   
import types
...
t = type( X ) 

получил ошибку : NameError: global name ‘type’ is not defined (Also, the following error occurred while attempting to render the standard error message, please see the event log for full details: ‘roles’)
Я что-то еще не подключил?

В руководстве по питону я нашел что функция type входит в Built-in Functions и
руководство
The Python interpreter has a number of functions built into it that are always available.



Офлайн

#6 Май 17, 2007 19:12:57

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

То якась фантастика, а ти allow_module додав? Якщо додав і не працює тоді замість

t = type(val)
пиши таке
t = val.__class__



Отредактировано (Май 17, 2007 19:14:05)

Офлайн

#7 Май 17, 2007 19:39:52

NilovSerge
От:
Зарегистрирован: 2007-02-15
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

Что за allow_module ?
А что я не могу просто в скрипте питона вызвать type( чтоб получить тип переменной в реквесте?
на строку

  t = val.__class__   
я получил при сохранении скрипта :“__class__” is an invalid attribute name because it starts with “_”.



Офлайн

#8 Май 17, 2007 19:50:21

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

Я тільки що перевірив - все працює. Ще раз все по порядку:
1 відкрий __init__.py і додай

  from AccessControl import allow_module
  allow_module('Products.myProduct.utils')
  
2 Створи utils.py в корені myProduct
3 Запиши в utils.py
import types
def xtype(val):
    t = type(val)
    if t == types.StringType:
        return "tstring"
    elif t == types.ListType:
        return "tlist"
    elif t == types.IntType:
        return "tinteger"
  [code]4 запусти zope
5 створи таку сторінку:
[code=xml]
<div define="xtype python:modules['Products.myProduct.utils'].xtype">
    <span tal:content="python:xtype(repr(request))"/>
</div>[/code]
6 Натисни test. Виведе tstring



Офлайн

#9 Май 17, 2007 20:04:25

NilovSerge
От:
Зарегистрирован: 2007-02-15
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

tabajara, спасибо я обязательно все это попробую .
Но зачем все так сложно? У меня нет никакого продукта, если имеются в виду обьекты в /Control_Panel/Products.
Я что не могу в питон-скрипте вызвать t = type(val) ?



Офлайн

#10 Май 17, 2007 21:29:44

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

request-параметр есть целое, строка или список?

NilovSerge
У меня нет никакого продукта, если имеются в виду обьекты в /Control_Panel/Products.
а я думав то продукт ))))))
NilovSerge
Я что не могу в питон-скрипте вызвать t = type(val) ?
нє,не можеш (((



Отредактировано (Май 17, 2007 21:57:47)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version