I include a comments plugin in my main view: {{=plugin_comments()}}
That plugin calls this controller: #checks to see whether hidden 'honeypot' field has any text in it (presumably placed there by a bot) def checkfilter(form): form.vars.filter = request.vars.filter if form.vars.filter == '': pass else: form.errors.bot = 'It seems like you may not be a human being! \ If you are, be sure not to enter anything into any fields in the \ form other than the large box for the text of your comment.' def post(): comment = db.plugin_comments_comment form = SQLFORM(comment, submit_button = 'add comment', separator = '', formstyle = 'ul', hidden = dict(filter = '')) # process form if form.process(onvalidation = checkfilter).accepted: response.flash = 'Thanks for your thoughts!' elif form.errors.bot: response.flash = form.errors.bot elif form.errors: response.flash = 'Sorry, something went wrong when I tried to add your comment.' else: pass comments = db(comment).select() return dict(form = form, comments = comments) Which in turn loads this view: {{for comment in comments:}} <div class="comment"> {{=SPAN(comment.posted_by.first_name + ' ' + comment.posted_by.last_name, _class='comment_author')}} {{=SPAN(comment.posted_on.strftime('%B %e, %Y'), _class='comment_date')}} <span class="comment_body">{{=comment.body}}</span> </div> {{pass}} {{=form}} It all works fine, except that if I don't end the form.process().accepted test with pass in the "else" condition, then the "else" condition fires as soon as the component loads.