2

我正在使用 web.py 作为框架构建一个网站。

这就是我的网址:

urls = (
    '/', 'index',
    '/search', 'search',
    '/book/(.*)', '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)
4

1 回答 1

0

渲染模板时,web.py 使用通配符查找与提供的名称匹配的模板文件。因此,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. 只有以 结尾的文件~被跳过。

注意另一个“陷阱”:如果(匹配的)模板文件以 结尾.htmlweb.py将自动将返回的内容类型设置为text/html. 我提出这个问题的原因是我发现自己养成了命名以 html 结尾的模板文件的习惯,即使我想返回文本或 xml。坏习惯。.html如果要返回 HTML 内容类型,请命名。命名他们.txt返回text/plain,命名他们.xhtml返回application/xhtml+xml。可以命名它们.json,但是您必须对返回标头进行编码以设置 content-type application/json

在您的情况下,正如您所发现的,book.bak目录中有一个导致冲突/混乱的目录。

于 2018-02-04T17:08:14.527 回答