Crossin的编程教室

标题: Python 实战(3):更多的页面 [打印本页]

作者: crossin先生    时间: 2015-4-19 22:56
标题: Python 实战(3):更多的页面
someweb-03.png
现在我们网站已经有了一个简单的页面、一段简单的请求处理代码和一个简单的数据库。上次最后我剧透了下,之后将会通过豆瓣电影的 API 获取更多的电影数据。不过在此之前,我要先把网站的结构再稍微扩展一下。暂时仍使用手工添加的几条测试数据来演示。

本篇的目标就是,让这个电影网站更像一个“网站”:有一个首页,首页上有影片的列表,点击列表中的某一部影片可以进入其详细页面。也不是很复杂,哦?

所以,如果我们把之前的 index.html 作为首页的话,还需要一个额外的新页面,用来展示一步影片的详细信息。同之前创建页面类似,首先在 urls 里增加一条跳转:

urls = (
    '/', 'index',
    '/movie/(\d+)', 'movie',
)

d+ 是正则表达式,表示一个数字,之前的基础课程中有提到过(微信中回复 55 可查看)。加上了括号,是为了让这个匹配到的数字可以被程序获取,成为后面所指向的 movie 中对应方法的参数。

这里,为了更好地定位数据库中的影片信息,我稍稍改动了之前的表结构,新增了一项属性 id:

create table movie (
        id,
        title,
        year,
        country,
        abstract
);

相应的,每条影片数据的 insert 语句也增加了一个唯一的数字作为 id。你需要重新生成并导入一遍数据库。

(当然,你也可以不加 id,而使用影片的 title 作为查找影片的依据。那样的话,urls 里就不要使用 \d+,而改用 .*。但这样,同名影片会有问题。)

新增处理请求的类 movie:

class movie:
    def GET(self, movie_id):
            movie_id = int(movie_id)
        movie = db.select('movie', where='id=$movie_id', vars=locals())[0]
        return render.movie(movie)

(手机上一行代码过长会被换行,请自行注意。建议横屏或在电脑上查看。)

当在浏览器中访问诸如 /movie/123 的地址时,请求被转到 movie 中的 GET 方法,而 123 就成为参数 movie_id。

select 是 web.py 提供的数据库查找方法,第一个参数是查询的表,参数 where 是查询条件,指定条件为'id=$movie_id',vars表示参数的查询来源。

这里略有些复杂。首先,方法里拿到的 movie_id 是字符串,所以需要转成 int。where 条件是一个将被拿到数据库中执行的查询条件,需要是一个字符串。同模板中一样,这里 $movie_id 是取变量 movie_id 的值,而 vars=locals() 则表示 $ 符号所取变量的范围为所有本地变量。select 拿到的是一组查询结果,后面加上 [0] 才能拿到具体的一个数据对象。

其实,对于现在这种简单查询,你也可以自己拼好查询字符串,看上去更简洁一些:

condition = 'id=' + movie_id
movie = db.select('movie', where=condition)[0]

接下来,要新增此页面的模板 movie.html:

$def with (movie)
<h1>$movie.title</h1>
<p>$movie.year</p>
<p>$movie.country</p>
<p>$movie.abstract</p>

这里拿到的不再是一个 list,而是单独一个对象,把其中的属性输出来即可。

再次 run 起你的网站程序 code.py。现在访问 127.0.0.1:8080/movie/1 就可以看到你添在数据库中,id 为 1 的影片的详细信息。

最后,为了让 index 和 movie 页面可以连为一体,我们来增加一些“超链接”,html 的语法为:

<a href="链接跳转的地址">链接显示的文字</a>

顺便再加上一些可有可无的修饰性文字:

[index.html]

$def with (movies)
<h4>欢迎来到</h4>
<h1>Crossin's Movie Site</h1>
<hr>
<p>影片列表:</p>
$for movie in movies:
        <li>
                <a href="movie/$movie['id']">$movie['title']</a>
        </li>

在这个 <a> 标签中,movie 的 title 作为链接文字,id 拼接成跳转的地址。

[movie.html]

$def with (movie)
<h4><a href="/">返回首页</a></h4>
<h1>$movie.title</h1>
<hr>        
<p>年代:$movie.year</p>
<p>国家:$movie.country</p>
<p>$movie.abstract</p>

OK。现在这个网站看起来已经有那么点意思了。


someweb-3-code.py (516 Bytes, 下载次数: 427)
someweb-3-movie.html (165 Bytes, 下载次数: 347)
someweb-3-tables.sql (3.63 KB, 下载次数: 327)
someweb-3-index.html (185 Bytes, 下载次数: 334)



作者: csyhhb    时间: 2015-5-22 17:13
抢个沙发支持下先生
作者: pilipala2357    时间: 2015-8-2 21:15
本帖最后由 pilipala2357 于 2015-8-2 21:18 编辑

先生你好!我运行完第一个页面可以打开,第二个页面not found...我的代码跟附件里的一样 ,直接复制的,数据库我用sqlite expert 查看也是正常的,请问您知道为什么会出错吗??╮(╯▽╰)╭

搜狗截图20150802211209.png (15.2 KB, 下载次数: 402)

搜狗截图20150802211209.png

2.png (13.26 KB, 下载次数: 399)

2.png


作者: crossin先生    时间: 2015-8-3 13:59
pilipala2357 发表于 2015-8-2 21:15
先生你好!我运行完第一个页面可以打开,第二个页面not found...我的代码跟附件里的一样 ,直接复制的,数 ...

很多可能,url的匹配规则不对,数据库的id不对,查询语句有问题
作者: 紫色de红薯    时间: 2016-10-21 09:45
请问先生,<class 'sqlite3.OperationalError'> at /movie/1
                 unrecognized token: "$"
哪里出错了?
作者: crossin先生    时间: 2016-10-21 13:26
紫色de红薯 发表于 2016-10-21 09:45
请问先生, at /movie/1
                 unrecognized token: "$"
哪里出错了?

sqlite执行的时候错了,应该是你执行的sql语句不对吧。

你可改一下,先把执行语句拼出来,确认没问题,再传给 sqlite 执行。
作者: winmount    时间: 2016-10-31 21:43
先生您好,我在运行0.0.0.0:8080/movie/1时遇到了以下错误,请问是什么原因?

<type 'exceptions.IndexError'> at /movie/1
详见附件

捕获.PNG (73.17 KB, 下载次数: 361)

捕获.PNG


作者: winmount    时间: 2016-10-31 21:55
解决了先生,我把movie_id=int(movie_id)前的int去掉就能显示了。。。请问先生这是为什么呢。。。
作者: crossin先生    时间: 2016-11-1 16:59
winmount 发表于 2016-10-31 21:55
解决了先生,我把movie_id=int(movie_id)前的int去掉就能显示了。。。请问先生这是为什么呢。。。 ...

这个不太清楚,之前也有人遇到,感觉是不是新版本sqlite或者webpy做了调整,之前这里用不用int应该都可以
现在有时候用了反而不对,有的是说语法问题
作者: cxh19920318    时间: 2016-11-30 12:26
先生,一直出现附件里的问题。请问是怎么回事?第一个页面打开正常,代码也是直接复制的。


错误.png (14.88 KB, 下载次数: 362)

$字符问题?

$字符问题?


作者: cxh19920318    时间: 2016-11-30 13:41
cxh19920318 发表于 2016-11-30 12:26
先生,一直出现附件里的问题。请问是怎么回事?第一个页面打开正常,代码也是直接复制的。

问题解决了,我import了一个sqlite3,但不知道是不是这个原因
作者: crossin先生    时间: 2016-11-30 14:51
cxh19920318 发表于 2016-11-30 12:26
先生,一直出现附件里的问题。请问是怎么回事?第一个页面打开正常,代码也是直接复制的。

movie = db.select('movie', where='id=$movie_id', vars=locals())[0]

这里改成文章中说的另一种方法:

condition = 'id=' + movie_id
movie = db.select('movie', where=condition)[0]
作者: royliu    时间: 2017-1-12 17:20
winmount 发表于 2016-10-31 21:55
解决了先生,我把movie_id=int(movie_id)前的int去掉就能显示了。。。请问先生这是为什么呢。。。 ...

这个问题,看下SQL文件里的ID是数字类型还是字符串类型,两种类型我都测试了下,如果sql文件中ID是整形,把movie_id=int(movie_id)前的int去掉就能显示,我的SQLite 版本是3.7.11,python是2.7
作者: crossin先生    时间: 2017-1-12 17:49
royliu 发表于 2017-1-12 17:20
这个问题,看下SQL文件里的ID是数字类型还是字符串类型,两种类型我都测试了下,如果sql文件中ID是整形, ...

是的,版本直接会有差异
作者: royliu    时间: 2017-1-12 18:03
crossin先生 发表于 2017-1-12 17:49
是的,版本直接会有差异

先生的教程写的简明易懂,很适合我这种零基础的小白,非常感谢
作者: shmxz1989    时间: 2017-2-1 17:42
本帖最后由 shmxz1989 于 2017-2-1 19:40 编辑

求助:首页能打开,详细页打开就不行了。看提示是编码问题?可我把movie.html文件里的内容在英文输入法状态下反复敲了几次还是不行,即使替换成C大的附件也一样的提示,且我确定编码选的是不带bom的utf-8。但就是打不开详情页,郁闷
补充:我将movie.html里的中文又全部换成英文之后,仍然还是那个提示。。。

11.JPG (84.63 KB, 下载次数: 274)

11.JPG

22.JPG (30.4 KB, 下载次数: 263)

22.JPG

33.JPG (39.7 KB, 下载次数: 282)

33.JPG

44.JPG (24.07 KB, 下载次数: 276)

44.JPG


作者: crossin先生    时间: 2017-2-2 10:36
shmxz1989 发表于 2017-2-1 17:42
求助:首页能打开,详细页打开就不行了。看提示是编码问题?可我把movie.html文件里的内容在英文输入法状态 ...

我现在也看不出是哪里问题,你得进一步调试。

把 movie.html 的内容简化,去掉中文,去掉数据库获取的数据,看看还报不报错。
如果还报错,就还是你html文件的问题

然后逐步测试是中文的问题,还是数据库数据的问题


作者: shmxz1989    时间: 2017-2-2 14:11
本帖最后由 shmxz1989 于 2017-2-2 15:04 编辑
crossin先生 发表于 2017-2-2 10:36
我现在也看不出是哪里问题,你得进一步调试。

把 movie.html 的内容简化,去掉中文,去掉数据库获取的数 ...

按照C大你说的方法都试过了,还是不行,按说应该就是movie.html文件的问题了,可index.html为什么又是正常的嘞。。。我甚至把index.html复制了一份,在它基础上把内容改成movie.html,但还是报这个错。真是邪门了。。。tables的那个文件应该也没问题吧。附上table的图:
补充:我把tables.sql也重写了一遍,然而还是没什么卵用。。。

捕获.JPG (52.01 KB, 下载次数: 276)

捕获.JPG


作者: crossin先生    时间: 2017-2-2 16:04
shmxz1989 发表于 2017-2-2 14:11
按照C大你说的方法都试过了,还是不行,按说应该就是movie.html文件的问题了,可index.html为什么又是正常 ...

一步一步来,别把问题混到一起。
你现在什么都不加还报错,那就是movie.html这个文件的问题,那你先别往里加内容啊。最简单的输出一行hello world还出错,那你先把这个文件的问题解决掉再说
作者: shmxz1989    时间: 2017-2-3 13:08
本帖最后由 shmxz1989 于 2017-2-3 13:11 编辑
crossin先生 发表于 2017-2-2 16:04
一步一步来,别把问题混到一起。
你现在什么都不加还报错,那就是movie.html这个文件的问题,那你先别往 ...

嗯,现在情况是这样:
换成“hello world”重新建的movie.html也试过,依然是万年不变的出错提醒。。。
后来我干脆把这个movie.html给删了,结果仍然出错,并且提示的不是预想的文件未找到之类,竟然还是编码错误,跟之前的提醒页面一毛一样。我也是醉了


作者: crossin先生    时间: 2017-2-3 14:07
shmxz1989 发表于 2017-2-3 13:08
嗯,现在情况是这样:
换成“hello world”重新建的movie.html也试过,依然是万年不变的出错提醒。。。
后 ...

不好说,看不到你的具体报错位置(截图上没截到)
删了还出错,那可能是数据库里的编码问题。但如果真是这样,列表页也应该出错。

怀疑是不是有其他地方弄乱了,你自己也没发现。建议你先全部用英文数据重新做一遍。
作者: shmxz1989    时间: 2017-2-3 16:02
本帖最后由 shmxz1989 于 2017-2-3 17:01 编辑
crossin先生 发表于 2017-2-3 14:07
不好说,看不到你的具体报错位置(截图上没截到)
删了还出错,那可能是数据库里的编码问题。但如果真是 ...

报错截图我重新截图了,不知道能否看出什么信息来,菜鸟一枚,还望见谅。
'utf8' codec can't decode byte 0xcf in position 9: invalid continuation byte,这个position 9指的哪里呢

补更:C大我已解决了。哈哈哈~,html、table文件啥的都没问题,问题还是在code代码里面。刚我先操练了实战4,发现post方法里查询数据用了where条件结果也是正常的。所以排除法推断是不是movie类方法的语句有问题,遂替换成先拼出condition字符串,然后直接where=condition,果然就好了。估计是web.py或者SQLite最新版本的问题。奶奶的折磨了我两天总算解决了。心里太特么爽了!嘎嘎嘎~~~

再次感谢C大不厌其烦地解答,感谢~

捕获.JPG (37.21 KB, 下载次数: 265)

捕获.JPG

捕获1.JPG (81.62 KB, 下载次数: 273)

捕获1.JPG

捕获2.JPG (89.37 KB, 下载次数: 261)

捕获2.JPG


作者: crossin先生    时间: 2017-2-5 00:14
shmxz1989 发表于 2017-2-3 16:02
报错截图我重新截图了,不知道能否看出什么信息来,菜鸟一枚,还望见谅。
'utf8' codec can't decode byte ...

似乎确实有这么个问题,之前好像有人遇到过。
解决了就好
作者: nekonekobox    时间: 2017-3-4 23:59
crossin老师附件里给的py文件写的有问题,之前文档里是对的
#-*- coding:utf-8 -*-
import web
db=web.database(dbn='sqlite',db='MovieSite.db')
render=web.template.render('templates/')

urls = (
    '/', 'index',
    '/movie/(\d+)','movie',
)


class index:
    def GET(self):
        movies=db.select('movie')
        return render.index(movies)
   
class movie:
    def GET(self,movie_id):
        movie_id=int(movie_id)
        movie=db.select('movie',where='id=$movie_id',vars=locals())[0]
        return render.movie(movie)

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

作者: crossin先生    时间: 2017-3-5 01:04
nekonekobox 发表于 2017-3-4 23:59
crossin老师附件里给的py文件写的有问题,之前文档里是对的
#-*- coding:utf-8 -*-
import web

具体是哪里的问题?我看了下没发现区别
是附件里的代码没有声明编码吗?
作者: nekonekobox    时间: 2017-3-5 15:59
crossin先生 发表于 2017-3-5 01:04
具体是哪里的问题?我看了下没发现区别
是附件里的代码没有声明编码吗? ...

附件里的someweb-3-code.py写的是
class movie:
    def GET(self, movie_id):
        movie = db.select('movie', where='id=$int(movie_id)', vars=locals())[0]
        return render.movie(movie)

少了一个
movie_id=int(movie_id)的申明
而db.select里面又多了一个int(movie_id)
作者: crossin先生    时间: 2017-3-5 17:09
nekonekobox 发表于 2017-3-5 15:59
附件里的someweb-3-code.py写的是
class movie:
    def GET(self, movie_id):

这个似乎是在某个版本下可行,但新版本好像就会报错
作者: 万建涛    时间: 2017-3-22 20:06
shmxz1989 发表于 2017-2-3 13:08
嗯,现在情况是这样:
换成“hello world”重新建的movie.html也试过,依然是万年不变的出错提醒。。。
后 ...

你怎么解决的,我遇到一样的问题
作者: 万建涛    时间: 2017-3-22 20:16
shmxz1989 发表于 2017-2-3 13:08
嗯,现在情况是这样:
换成“hello world”重新建的movie.html也试过,依然是万年不变的出错提醒。。。
后 ...

亲,我遇到了一样的问题 第一页能显示,点击链接报错,加个朋友呗
我qq--979534665

作者: crossin先生    时间: 2017-3-22 21:32
万建涛 发表于 2017-3-22 20:16
亲,我遇到了一样的问题 第一页能显示,点击链接报错,加个朋友呗
我qq--979534665
...

他说的应该是指这句:
movie = db.select('movie', where='id=$movie_id', vars=locals())[0]

这里改成文章中说的另一种方法:

condition = 'id=' + movie_id
movie = db.select('movie', where=condition)[0]
作者: 万建涛    时间: 2017-3-23 10:34
crossin先生 发表于 2017-3-22 21:32
他说的应该是指这句:
movie = db.select('movie', where='id=$movie_id', vars=locals())[0]

condition='id='+movie_id
movies=db.select('movie',where=condition)[0]
return render.movie(movies)     

还是报错
'utf8' codec can't decode byte 0xb7 in position 16: invalid start byte

Python        G:\Python\Anaconda\Anaconda2\lib\encodings\utf_8.py in decode, line 15
Web        GET http://127.0.0.1:8080/movie/2

作者: crossin先生    时间: 2017-3-23 17:32
万建涛 发表于 2017-3-23 10:34
condition='id='+movie_id
movies=db.select('movie',where=condition)[0]
return render.movie(movies)  ...

1 确保没有用 windows 的记事本来写代码。如果有,重新换个编辑器重输代码。
2 先用英文数据把代码调通,再尝试中文

你先这个遇到中文编码问题,要慢慢找原因的。这样看不出哪里的问题。所以先用英文数据
作者: hm961225    时间: 2017-7-22 11:58
IterBetter instance has no attribute 'title'  ,先生麻烦问一下,为什么总是出现这个错误,说我没有title属性,但是数据库里确实已经加了这个属性呀,代码也是按照附件上面来的,不知道怎么回事
作者: crossin先生    时间: 2017-7-22 15:07
hm961225 发表于 2017-7-22 11:58
IterBetter instance has no attribute 'title'  ,先生麻烦问一下,为什么总是出现这个错误,说我没有titl ...

把你的代码贴上来看看
作者: silence    时间: 2017-11-29 20:49
本帖最后由 silence 于 2017-11-29 21:05 编辑

先生,你好,因为有中文,我的页面中出现了 1.jpg 编码错误的情况,在python程序中加入 2.jpg 也没有起到什么效果,请问应该用什么方法解决,谢谢~~后来觉得可能是Sublime Text2本身不支持中文,在里面下载了2个支持中文的包,也还是没有可以显示中文~

作者: crossin先生    时间: 2017-11-30 00:26
数据库里编码的问题,这个比较复杂,需要调试,没法一下子给你明确解答
而且你给的报错信息也不全

建议你看下公众号里回复 编码 的几篇文章,然后结合报错的位置调试一下,定位下问题的具体所在
作者: silence    时间: 2017-12-5 20:32
1.jpg
先生,你好,模板中的写入中文后就会出现编码问题,一直解决不了,请问这个需要怎么解决呀


作者: crossin先生    时间: 2017-12-6 14:47
silence 发表于 2017-12-5 20:32
先生,你好,模板中的写入中文后就会出现编码问题,一直解决不了,请问这个需要怎么解决呀

...

看楼上的回复。光从这个没法帮你看出来问题,这个很难调试
建议先用英文练习,将框架调通

编码的问题可以公众号回复 编码 了解相关原理
作者: wangyange    时间: 2017-12-21 22:08
老师您好,一直提示找不到表,但是明显看到是有表存在的,这个该怎么办啊?

QQ图片20171221220608.png (43.14 KB, 下载次数: 249)

QQ图片20171221220608.png

QQ图片20171221220627.png (98.45 KB, 下载次数: 239)

QQ图片20171221220627.png


作者: crossin先生    时间: 2017-12-22 14:17
wangyange 发表于 2017-12-21 22:08
老师您好,一直提示找不到表,但是明显看到是有表存在的,这个该怎么办啊?
...

确认db文件放的路径对不对
作者: ppy    时间: 2018-1-19 18:08
'utf8' codec can't decode byte 0xbb in position 0: invalid start byte
遇到这个问题的时候,上网搜索了一下解决方案,然后实践后得出该方案可用,供大家参考。
这个错误的报意思是:无法解码,在位置0处有非法的开始字节。

在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了。

解决方案:

打开notepad++,新建三个文件,把code.py,index.html,movie.html三个文件的内容都重新拷贝一下至新的文件中,重新保存,可以解决该问题。
作者: qiqibaoer    时间: 2018-2-6 14:23
本帖最后由 qiqibaoer 于 2018-2-6 14:26 编辑
pilipala2357 发表于 2015-8-2 21:15
先生你好!我运行完第一个页面可以打开,第二个页面not found...我的代码跟附件里的一样 ,直接复制的,数 ...

我也用的sqlite,第一个页面页一直报错。

<class 'AttributeError'> at /'NoneType' object has no attribute 'name'
)

搞不懂

db = web.database(dbn='sqlite', db='C:/Users/.../MovieSite.db')

这句有问题吗?


作者: skybeak    时间: 2018-4-11 17:09
老师,你好,我出现了编码的问题,就是在这个例子中必须的用您的html,哪怕是在html中加点东西在都去掉,保存运行也会报错,这样的话自己就没办法写html,只能用您现成的,在上一个例子,Python 实战(2):简单的数据库中对html进行了更改,保存是可以正常运行的。请问这个应该怎么解决。我用的是python35中自带的shell。
错误提示:'gbk' codec can't decode byte 0xa2 in position 221: illegal multibyte sequence
作者: crossin先生    时间: 2018-4-11 21:48
skybeak 发表于 2018-4-11 17:09
老师,你好,我出现了编码的问题,就是在这个例子中必须的用您的html,哪怕是在html中加点东西在都去掉,保 ...

换个可以设置编码的编辑器,比如 notepad++,或者建议直接在 pycharm 里编辑和保存文件
作者: skybeak    时间: 2018-4-18 16:35
crossin先生 发表于 2018-4-11 21:48
换个可以设置编码的编辑器,比如 notepad++,或者建议直接在 pycharm 里编辑和保存文件 ...

请问老师,pycharm对电脑的要求高么?
作者: crossin先生    时间: 2018-4-18 23:11
skybeak 发表于 2018-4-18 16:35
请问老师,pycharm对电脑的要求高么?

有一点,内存不够的话,启动会比较慢,但用起来还好
作者: 风扇很响    时间: 2018-5-12 16:05
掉进了编码问题的坑...
全英文调试通过,在index.html里改了个中文就变成这样了
无标题3.jpg
$def with (movies)
<h4>欢迎来到</h4>
<h1>My Movie Site</h1>
<hr>
<p>Move List</p>
$for movie in movies:
    <li>
        <a href="movie/$movie['id']">$movie['title']</a>
    </li>

作者: crossin先生    时间: 2018-5-13 15:39
风扇很响 发表于 2018-5-12 16:05
掉进了编码问题的坑...
全英文调试通过,在index.html里改了个中文就变成这样了

用pycharm或者notepad++之类的软件改一下html文件的编码试试看
作者: 风扇很响    时间: 2018-5-13 16:23
crossin先生 发表于 2018-5-13 15:39
用pycharm或者notepad++之类的软件改一下html文件的编码试试看

用的pycharm,保存成utf-8了还是不行,加了“<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>”也不行......
作者: crossin先生    时间: 2018-5-14 22:57
风扇很响 发表于 2018-5-13 16:23
用的pycharm,保存成utf-8了还是不行,加了“”也不行......

改成gbk
作者: 风扇很响    时间: 2018-5-15 22:11
crossin先生 发表于 2018-5-14 22:57
改成gbk

这次终于成功了。谢谢老师!
作者: KitChen    时间: 2018-5-15 23:34
本帖最后由 KitChen 于 2018-5-15 23:45 编辑

把HTML里面全部改成英文之后,就没有编码问题了。
显示如下:



点开之后出现错误:




代码如下:
import web

db = web.database(dbn='sqlite', db='MovieSite.db')
render = web.template.render('templates/')

urls = (
    '/', 'index',
    '/movie/(\d+)', 'movie',
)


class index:
    def GET(self):
        movies = db.select('movie')
        return render.index(movies)


class movie:
    def GET(self, movie_id):
        #movie_id=int(movie_id)
        movie = db.select('movie', where='id=$int(movie_id)', vars=locals())[0]
        return render.movie(movie)


if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()


数据库也正常:



HTML 文件如下:
$def with (movie)
<h4><a href="/">return back</a></h4>
<h1>$movie.title</h1>
<hr>        
<p>whenmovie.year</p>
<p>countrymovie.country</p>
<p>$movie.abstract</p>


===========================
不知道什么原因。
请指点。




1.jpg (439.51 KB, 下载次数: 326)

1.jpg

2.jpg (816.38 KB, 下载次数: 333)

2.jpg

3.jpg (463.33 KB, 下载次数: 323)

3.jpg


作者: crossin先生    时间: 2018-5-16 09:44
KitChen 发表于 2018-5-15 23:34
把HTML里面全部改成英文之后,就没有编码问题了。
显示如下:

movie = db.select('movie', where='id=$int(movie_id)', vars=locals())[0]
这句有些版本不支持。直接用字符串拼sql语句。翻一下上面的讨论里有的
作者: KitChen    时间: 2018-5-17 13:58
后面已经解决了,忘记回复了。


先根据打印定位到是SQLlite的问题。


然后在sqlite里面尝试命令:


然后修改代码。





5.jpg (58.02 KB, 下载次数: 326)

5.jpg

1.jpg (51.76 KB, 下载次数: 304)

1.jpg


作者: 少年与猫.    时间: 2018-5-31 13:40
crossin先生 发表于 2017-12-6 14:47
看楼上的回复。光从这个没法帮你看出来问题,这个很难调试
建议先用英文练习,将框架调通

先生我遇到了同样的问题...跳转页面点击就会报错   这样的话是要将数据库先换成英文吗还是
作者: crossin先生    时间: 2018-5-31 15:33
少年与猫. 发表于 2018-5-31 13:40
先生我遇到了同样的问题...跳转页面点击就会报错   这样的话是要将数据库先换成英文吗还是 ...

对。
webpy因为现在维护更新很慢,对新版本还有编码的处理不是太好。了解基本原理之后,建议进一步可以学习django
作者: 少年与猫.    时间: 2018-5-31 16:24
crossin先生 发表于 2018-5-31 15:33
对。
webpy因为现在维护更新很慢,对新版本还有编码的处理不是太好。了解基本原理之后,建议进一步可以学 ...

那先生有推荐的django教程吗  我因为要建一个酒店管理系统的小网站
作者: crossin先生    时间: 2018-5-31 22:47
少年与猫. 发表于 2018-5-31 16:24
那先生有推荐的django教程吗  我因为要建一个酒店管理系统的小网站

https://tutorial.djangogirls.org/zh/

资源网盘里有pdf版
作者: boat    时间: 2019-8-16 09:33
因为使用pymysql,所以直接使用了SQL语句,再用了execute(sql)。
数据库里以字典的形式存储的数据,所以在movie.html文件里,把movie.id这些都改成了movie['id']的形式




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5