Найти - Пользователи
Полная версия: request-параметр есть целое, строка или список?
Начало » Zope/Plone/Bluebream » request-параметр есть целое, строка или список?
1 2
NilovSerge
Привет!
Подскажите такое. Как в странице ZPT проверить что переданный request-параметр есть целое, строка или список?
Средствами ZPT или Python ?
tabajara
В зрт нема функції 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"
NilovSerge
Спасибо, это то что мне нужно.
tabajara
Ше така штука, може не знаєш. В продукті в __init__.py треба додати таке:
from AccessControl import allow_module
allow_module('Products.myProduct.utils')
NilovSerge
Не получилось
на строке
   
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.
tabajara
То якась фантастика, а ти allow_module додав? Якщо додав і не працює тоді замість
t = type(val)
пиши таке
t = val.__class__
NilovSerge
Что за allow_module ?
А что я не могу просто в скрипте питона вызвать type( чтоб получить тип переменной в реквесте?
на строку
  t = val.__class__   
я получил при сохранении скрипта :“__class__” is an invalid attribute name because it starts with “_”.
tabajara
Я тільки що перевірив - все працює. Ще раз все по порядку:
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
NilovSerge
tabajara, спасибо я обязательно все это попробую .
Но зачем все так сложно? У меня нет никакого продукта, если имеются в виду обьекты в /Control_Panel/Products.
Я что не могу в питон-скрипте вызвать t = type(val) ?
tabajara
NilovSerge
У меня нет никакого продукта, если имеются в виду обьекты в /Control_Panel/Products.
а я думав то продукт ))))))
NilovSerge
Я что не могу в питон-скрипте вызвать t = type(val) ?
нє,не можеш (((
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