The _q_resolve() method
Note that the ExtraDirectory class inherits from Resolving (in addition to Directory). The Resolving mixin modifies the _q_traverse() so that, when a component has an attribute name designated by _q_translate(), but the Directory instance does not actually have that attribute, the _q_resolve() method is called to "resolve" the trouble. Typically, the _q_resolve() imports or constructs what should be the value of the designated attribute. The modified _q_translate() sets the attribute value so that the _q_resolve() won't be called again for the same attribute. The _q_resolve() pattern is useful when you want to delay the work of constructing the values for exported attributes.
Forms
You can't get very far writing web applications without writing forms. The root demo includes, at http://localhost:8080/extras/form, a page that demonstrates basic usage of the Form class and widgets defined in the quixote.form package.
$Id: demo.txt 25695 2004-11-30 20:53:44Z dbinger $
这两段没看懂。:(
extras.ptl:
# _q_resolve() is a hook that can be used to import only
# when it's actually accessed. This can be used to make
# start-up of your application faster, because it doesn't have
# to import every single module when it starts running.
if component == ' form ' :
from quixote.demo.forms import form_demo
return form_demo
directory.py:
"""
A mix-in class that provides the _q_resolve() method. _q_resolve()
is called if a component name appears in the _q_exports list but is
not an instance attribute. _q_resolve is expected to return the
component object.
"""
def _q_resolve(self, name):
return None
def _q_translate(self, component):
name = super(Resolving, self)._q_translate(component)
if name is not None and not hasattr(self, name):
obj = self._q_resolve(name)
setattr(self, name, obj)
return name
class Directory的_q_translate:
""" (component : string) -> string | None
Translate a path component into a Python identifier. Returning
None signifies that the component does not exist.
"""
if component in self._q_exports:
if component == '' :
return ' _q_index ' # implicit mapping
else :
return component
else :
# check for an explicit external to internal mapping
for value in self._q_exports:
if isinstance(value, tuple):
if value[0] == component:
return value[ 1 ]
else :
return None