我正在使用web.py作为框架构建网站。
这就是我的网址:
urls = (
'/', 'index',
'/search', 'search',
'/book/(.*)', 'book'
)
这是图书类的样子:
class book:
def GET(self, isbn):
isbnvar = "isbn = '{0}'".format(isbn)
book_details = db.select('books_bookdata',where=isbnvar)
return render.book(book_details,price) # price is a global variable
修改:我的图书模板以 -
开头$def with (book_details, price)
转到/ book / 9876543210987会引发__template__() takes no arguments (2 given)
错误。我无法弄清楚我做错了什么。
修改:这是完整的追溯
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 239, in process
return self.handle()
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 230, in handle
return self._delegate(fn, self.fvars, args)
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 420, in _delegate
return handle_class(cls)
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 396, in handle_class
return tocall(*args)
File "/home/chaitanya/justcompare/code.py", line 45, in GET
return render.book(book_details,price)
File "/usr/local/lib/python2.7/dist-packages/web/template.py", line 881, in __call__
return BaseTemplate.__call__(self, *a, **kw)
File "/usr/local/lib/python2.7/dist-packages/web/template.py", line 808, in __call__
return self.t(*a, **kw)
TypeError: __template__() takes no arguments (2 given)
答案 0 :(得分:0)
在渲染模板时,web.py使用globbing查找与提供的名称匹配的模板文件。因此,render.book(...)
将查找以book
开头的文件。具体做法是:
=== template.py ===
def _findfile(self, path_prefix):
p = [f for f in glob.glob(path_prefix + '.*') if not f.endswith('~')]
p.sort() # sort the matches for deterministic order
return p and p[0]
这意味着它会在book.a
之前使用book.html
等,如果它们存在的话。 book.bak
并不特殊,因此优先于book.html
。仅跳过以~
结尾的文件。
再注意一下'gotcha':如果(匹配)模板文件以.html
结尾,web.py
会自动将返回的内容类型设置为text/html
。我提出这个问题的原因是我发现自己养成了用html命名的模板文件的习惯,即使我想返回文本或xml。坏习惯。如果要返回HTML内容类型,请为.html
命名。将它们命名为.txt
以返回text/plain
,将它们命名为.xhtml
以返回application/xhtml+xml
。可以将它们命名为.json
,但您必须对返回标头进行编码以设置内容类型application/json
。
在你的情况下,正如你所发现的那样,目录中有book.bak
导致冲突/混淆。