/ Published in: Python
These are code snippets from different files for a Pylons project that show a working (provided the environment) htmlfill example.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
######################################################## development.ini / production.ini [app:main] ... lang = fr ##################################################################### project/lib/base.py class BaseController(WSGIController): ### [...snip...] def __before__(self): ### [...snip...] formencode.api.set_stdtranslation(domain="FormEncode", languages=[config.get('lang', 'fr')]) ################################################################## project/lib/helpers.py from formencode import htmlfill def p_error_formatter(error): return '<p class="error">%s</p>' % htmlfill.html_quote(error) def ol_error_formatter(error): return '<ol class="errors"><li>%s</li></ol>' % htmlfill.html_quote(error) def div_error_formatter(error): return '<div class="error">%s</div>' % htmlfill.html_quote(error) def errorform(form_content, errors): """Return an HTMLFILLed form, according to those errors""" formats = {'default': p_error_formatter, 'p': p_error_formatter, 'ol': ol_error_formatter, 'div': div_error_formatter} defs = errors.value if errors else {} errs = errors.unpack_errors() if errors else {} return htmlfill.render(form_content, defs, errs, add_attributes={'+class': ' error'}, error_formatters=formats) # # NOTE: this will add a "class='error'" to each <input /> tag also. ## ############################################################# project/contorller/prefs.py import formencode from formencode import validators from formencode import htmlfill class UniqueUsername(formencode.FancyValidator): def _to_python(self, value, state): chk = model.User.query.filter_by(username=value).first() if chk: raise formencode.Invalid( "Ce nom d'usager existe déjà ", value, state) return value class PasswdValidate(formencode.Schema): username = formencode.All(validators.String(min=6,max=20), validators.PlainText(), UniqueUsername()) passwd1 = validators.String(not_empty=True) passwd2 = validators.String(not_empty=True) chained_validators = [validators.FieldsMatch('passwd1', 'passwd2')] ### CONTROLLER class PrefsController(BaseController): def passwd(self): return render("/prefs/passwd.html") def save_passwd(self): try: prm = PasswdValidate().to_python(request.params) except validators.Invalid, e: c.errors = e return render('/prefs/passwd.html') ##################################### project/templates/prefs/passwd.html (Mako template) ## ## NOTE tue usage of: buffered="True" .. required for h.errorform() to get the content ## ${h.errorform(form(), c.errors)} <%def name="form()" buffered="True"> <form id="editform" action="${h.url_for(action='save_passwd')}" method="post"> <ol> <li class="first"><label for="username">Username<em>*</em></label> ${h.text_field('username', size=15)}<br /> <form:error name="username" format="ol" /> </li> <li><label>Password:</label> <input type="password" name="passwd1" size="15" /> <form:error name="passwd1" /> </li> <li class="first"><label>Punch it again:</label> <input type="password" name="passwd2" size="15" /> <form:error name="passwd2" /> </li> </ol> <br /> <input type="submit" value="Save" /> </form> </%def> ################################################################# Add your own stylesheet /* with stuff :) */