cheetah templating: place holders needed in a template

Discussion in 'Python' started by ajay.padala, Apr 12, 2006.

  1. ajay.padala

    ajay.padala Guest

    Hi

    I would like to be able to get the inputs that are needed into a
    template file programmatically.

    For example if we had a template:

    =====================
    $name has $num marbles in his hand.
    =====================

    I want to be able to initialise this template and call a method on it
    to get the list ['name', 'num']

    Is there anything in cheetah which does this?

    At present, I am sending a "fake" dictionary into the searchList to do
    this. This is coded as.

    fake = Generic()
    t = Template(file=absFileName, searchList=[fake])
    print fake.calledAtts

    =========================================

    class Generic(object):
    """ Generic object can pretend to be a dictionary or a list and
    doesn't throw
    any errors whatever you call it for """

    # def __new__(cls, *args, **kwargs):
    # if '_inst' not in vars(cls):
    # cls._inst = object.__new__(cls, *args, **kwargs)
    # return cls._inst

    calledAtts = sets.Set()

    def __init__(self, *args, **kwargs):
    pass

    def __call__(self, *args, **kwargs):
    return self

    def __repr__(self):
    return "Generic"

    def __nonzero__(self):
    return True

    def __getattr__(self, name):
    return self

    __delattr__ = __getattr__

    def __setattr__(self, name, value):
    return self

    def __len__(self):
    return 1

    def __iter__(self):
    return iter(("Generic",))

    def __getitem__(self, i):
    if isinstance(i,types.StringType):
    self.calledAtts.add(str(i))
    return self

    def __setitem__(self, i, v):
    return self

    def __contains__(self, itemName):
    print "contains " + itemName
    return True

    def has_key(self, *args, **kwargs):
    # print "has key called"
    return True

    __delitem__ = __getitem__

    ========================================

    This just logs each access to the dictionary and stores the key under
    self.calledAtts

    But obviously this won't work if I have #if statements etc. I am hoping
    cheetah already has this feature somewhere which is much more robust
    but I can't find it.

    Ajay
     
    ajay.padala, Apr 12, 2006
    #1
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.