Spending hours debugging new errors after splitting a big controller into two files. It seems like web2py is not robust with multiple controllers in a single applications.
Suddenly, Python thinks that I can't use the format method on a string. In a form to edit categories, a user can press a submit button named delete to delete a category. If the category still reference items in the database, I generate a flash to tell the user and don't do the delete. Here is the part of the form code: cats_view = TABLE() for cat in cats: cats_view.append( TR( TD(cat.name), TD( FORM(INPUT(_type="hidden", _name="id", _value=cat.id), INPUT(_type="hidden", _name="name", _value=cat.name), INPUT(_type="submit", _name="edit", _value="edit"), INPUT(_type="submit", _name="edit", _value="delete"), _onsubmit="return delete_confirm(this);" ) ) ) ) if cats.__len__() == 0: cats_view = "Well, you don't seem to have any categories to edit..." form = FORM(cats_view, _onsubmit="return delete_confirm(this);") if request.post_vars: cat_name = request.post_vars.name cat_num = request.post_vars.id if request.post_vars.edit == "edit": form.insert(0, FORM('Category: ', INPUT(_type = "hidden", _name = "id", _value = cat_num), INPUT(_name = 'new_name', _value = cat_name), XML(' '), INPUT(_type = 'submit')) ) elif request.post_vars.edit == "delete": cat_joke_cnt = jodb(jodb.joke_category.category == cat_num).count() if cat_joke_cnt > 0: session.flash = ( """The category {0} still has {1} jokes. You can't delete a category that contains jokes.""".format(cat_name, cat_joke_cnt) ) redirect(URL('full', 'full_view')) elif cat_name == 'not sure': session.flash = """So sorry. You can't delete the '{0}' category.""".format(cat_name) redirect(URL('full', 'full_view')) # prevents inconsistent id for category "not sure" else: id = jodb(jodb.category.id == cat_num).delete() session.flash = "Category " + cat_name + " deleted." redirect(URL('full', 'full_view')) After attempting to delete a category that still references items, the following error resulted: <type 'exceptions.AttributeError'> 'str' object has no attribute 'format' VERSIONweb2py™(2, 2, 1, datetime.datetime(2012, 10, 21, 16, 57, 4), 'stable')TRACEBACK 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Traceback (most recent call last): File "C:\Users\Lewisl\Dropbox\web2py\gluon\restricted.py", line 212, in restricted exec ccode in environment File "C:/Users/Lewisl/Dropbox/web2py/applications/pyjokes/controllers/full.py" <http://127.0.0.1:8000/admin/default/edit/pyjokes/controllers/full.py>, line 573, in <module> File "C:\Users\Lewisl\Dropbox\web2py\gluon\globals.py", line 188, in <lambda> self._caller = lambda f: f() File "C:\Users\Lewisl\Dropbox\web2py\gluon\tools.py", line 2911, in f return action(*a, **b) File "C:\Users\Lewisl\Dropbox\web2py\gluon\tools.py", line 2911, in f return action(*a, **b) File "C:/Users/Lewisl/Dropbox/web2py/applications/pyjokes/controllers/full.py" <http://127.0.0.1:8000/admin/default/edit/pyjokes/controllers/full.py>, line 467, in edit_cat a category that contains jokes.""".format(cat_name, cat_joke_cnt) AttributeError: 'str' object has no attribute 'format' All I did today was paste the cut and paste the function from default.py to full.py. Previously the function worked perfectly. A bug in web2py? Something I did? Should I give up on multiple controllers and go back to just one file? Thanks. --