15325@qq.com
|
2.0/chapter03/#287 |
2009-10-23 12:13:08
|
(见上)
|
|
jerry li
|
2.0/chapter10/#31 |
2009-10-23 12:13:28
|
属性名称<literal>book_set</literal>是由模型名称的小写(如book)加<literal>_set</literal>组成的。
|
|
mitnk
|
2.0/chapter07/#110 |
2009-10-23 12:14:36
|
我们已经在第三章学过,这个view函数你可以放到Python的搜索路径任何位置。
|
|
mitnk
|
2.0/chapter07/#110 |
2009-10-23 12:14:49
|
我们已经在第三章学过,这个view函数你可以放到Python的搜索路径的任何位置。
|
|
mitnk
|
2.0/chapter07/#111 |
2009-10-23 12:15:46
|
为了便于讨论,咱们将它放在 books/views.py 里。
|
|
15325@qq.com
|
2.0/chapter03/#288 |
2009-10-23 12:16:36
|
因为你学习了Django,希望你能将Django的知识应用在那些不一定需要使用Django的项目上。
|
|
mitnk
|
2.0/chapter07/#113 |
2009-10-23 12:17:08
|
这个 search_form.html 模板,可能看起来是这样的:
|
|
mitnk
|
2.0/chapter07/#116 |
2009-10-23 12:19:07
|
而 urls.py 中的 URLpattern 可能是这样的:
|
|
15325@qq.com
|
2.0/chapter03/#290 |
2009-10-23 12:19:31
|
为了让Django视图显示当前日期和时间,我们仅需要把语句:datetime.datetime.now()放入视图函数,然后返回一个HttpResponse对象即可。代码如下:
|
|
mitnk
|
2.0/chapter07/#119 |
2009-10-23 12:23:36
|
(注意,我们直接将views模块import进来了,而不是用类似 rom mysite.views import
search_form 这样的语句,因为前者看起来更简洁。)
|
|
15325@qq.com
|
2.0/chapter03/#293 |
2009-10-23 12:23:43
|
正如我们的hello函数一样,这个函数也保存在view.py中。为了简洁,上面我们隐藏了hello函数。下面是完整的view.py文件内容:
|
|
mitnk
|
2.0/chapter07/#120 |
2009-10-23 12:25:21
|
我们将在第8章讲述更多的关于import的用法。)
|
|
mitnk
|
2.0/chapter07/#119 |
2009-10-23 12:25:36
|
(注意,我们直接将views模块import进来了,而不是用类似 rom mysite.views import
search_form 这样的语句,因为前者看起来更简洁。
|
|
15325@qq.com
|
2.0/chapter03/#296 |
2009-10-23 12:25:52
|
(从现在开始,如非必要,本文不再重复列出以前的代码。
|
|
15325@qq.com
|
2.0/chapter03/#296 |
2009-10-23 12:26:04
|
(从现在开始,如非必要,本文不再重复列出先前的代码。
|
|
15325@qq.com
|
2.0/chapter03/#297 |
2009-10-23 12:27:21
|
你应该懂得识别哪些是新代码,哪些是先前的。
|
|
15325@qq.com
|
2.0/chapter03/#297 |
2009-10-23 12:27:30
|
你应该懂得识别哪些是新代码,哪些是先前的。)
|
|
15325@qq.com
|
2.0/chapter03/#298 |
2009-10-23 12:27:41
|
(见上)
|
|
15325@qq.com
|
2.0/chapter03/#300 |
2009-10-23 12:29:13
|
让我们分析一下改动后的views.py:
|
|
15325@qq.com
|
2.0/chapter03/#302 |
2009-10-23 12:30:55
|
在文件顶端,我们添加了一条语句:import datetime。这样就可以计算日期了。
|
|
15325@qq.com
|
2.0/chapter03/#309 |
2009-10-23 12:32:28
|
(目前HTML是有错误的,但我们这样做是为了保持例子的简短。)
|
|
15325@qq.com
|
2.0/chapter03/#307 |
2009-10-23 14:50:18
|
字符串中的%s是占位符,字符串后面的百分号表示用它后面的变量now的值来代替%s。变量%s是一个datetime.datetime对象。它虽然不是一个字符串,但是%s(格式化字符串)会把它转换成字符串,如:2008-12-13
14:09:39.002731。这将导致HTML的输出字符串为:It is now 2008-12-13
14:09:39.002731。
|
|
15325@qq.com
|
2.0/chapter03/#311 |
2009-10-23 14:54:55
|
最后,正如我们刚才写的hello函数一样,视图返回一个HttpResponse对象,它包含生成的响应。
|
|
15325@qq.com
|
2.0/chapter03/#313 |
2009-10-23 14:57:24
|
添加上述代码之后,还要在urls.py中添加URL模式,以告诉Django由哪一个URL来处理这个视图。
|
|
15325@qq.com
|
2.0/chapter03/#314 |
2009-10-23 14:59:44
|
用/time/之类的字眼易于理解:
|
|
15325@qq.com
|
2.0/chapter03/#317 |
2009-10-23 15:00:12
|
这里,我们修改了两个地方。
|
|
15325@qq.com
|
2.0/chapter03/#318 |
2009-10-23 15:01:33
|
第一,在顶部导入current_datetime函数;
|
|
15325@qq.com
|
2.0/chapter03/#318 |
2009-10-23 15:04:36
|
首先,在顶部导入current_datetime函数;
|
|
15325@qq.com
|
2.0/chapter03/#319 |
2009-10-23 15:07:06
|
其次,也是比较重要的:添加URL模式来映射URL中的/time/和新视图。
|
|
15325@qq.com
|
2.0/chapter03/#320 |
2009-10-23 15:08:01
|
理解了么?
|
|
15325@qq.com
|
2.0/chapter03/#325 |
2009-10-23 15:08:59
|
Django时区代码
|
|
15325@qq.com
|
2.0/chapter03/#322 |
2009-10-23 15:12:22
|
写好视图并且更新URLconf之后,运行命令python manage.py runserver以启动服务,在浏览器中输入http://127.0.0.1:8000/time/。
|
|
15325@qq.com
|
2.0/chapter03/#323 |
2009-10-23 15:12:48
|
你将看到当前的日期和时间。
|
|
15325@qq.com
|
2.0/chapter03/#327 |
2009-10-23 15:16:02
|
视乎你的机器,显示的日期与时间可能和实际的相差几个小时。
|
|
15325@qq.com
|
2.0/chapter03/#328 |
2009-10-23 15:17:50
|
这是因为Django是有时区意识的,并且默认为America/Chicago。
|
|
15325@qq.com
|
2.0/chapter03/#328 |
2009-10-23 15:18:05
|
这是因为Django是有时区意识的,并且默认时区为America/Chicago。
|
|
15325@qq.com
|
2.0/chapter03/#325 |
2009-10-23 15:18:17
|
Django时区
|
|
15325@qq.com
|
2.0/chapter03/#329 |
2009-10-23 15:24:12
|
(它必须有个值,它的默认值是Django的诞生地:美国/芝加哥)如果你处在别的时区,你需要在settings.py文件中更改这个值。请参见它里面的注释,以获得最新世界时区列表。
|
|
15325@qq.com
|
2.0/chapter03/#341 |
2009-10-23 15:25:12
|
例如,考虑一下current_datetime视图。
|
|
15325@qq.com
|
2.0/chapter03/#346 |
2009-10-23 15:26:01
|
在这个例子里,current_datetime被两个URL使用。
|
|
15325@qq.com
|
2.0/chapter03/#347 |
2009-10-23 15:27:53
|
这是一个故弄玄虚的例子,但这个方法迟早会用得上。
|
|
15325@qq.com
|
2.0/chapter03/#350 |
2009-10-23 15:29:37
|
URLconf和视图是松耦合的。
|
|
15325@qq.com
|
2.0/chapter03/#353 |
2009-10-23 15:30:54
|
第三个视图
|
|
15325@qq.com
|
2.0/chapter03/#358 |
2009-10-23 15:44:45
|
举个例子,一家在线书店会为每一本书提供一个URL,如:/books/243/、/books/81196/。
|
|
15325@qq.com
|
2.0/chapter03/#373 |
2009-10-23 15:48:05
|
如果你有其它web平台的开发经验(如PHP或Java),你可能会想:嘿!让我们用查询字符串参数吧!
|
|
15325@qq.com
|
2.0/chapter03/#374 |
2009-10-23 15:56:30
|
就像/time/plus?hours=3里面的小时应该在查询字符串中被参数hours指定(问号后面的是参数)。
|
|
15325@qq.com
|
2.0/chapter03/#382 |
2009-10-23 16:00:18
|
那么,我们如何设计程序来处理任意数量的时差?
|
|
15325@qq.com
|
2.0/chapter03/#383 |
2009-10-23 16:02:57
|
答案是:使用通配符(wildcard URLpatterns)。正如我们之前提到的那样,一个URL模式就是一个正则表达式。因此,这里可以使用\d+来匹配1个以上的数字。
|
|
15325@qq.com
|
2.0/chapter03/#383 |
2009-10-23 16:03:15
|
答案是:使用通配符(wildcard URLpatterns)。正如我们之前提到过,一个URL模式就是一个正则表达式。因此,这里可以使用\d+来匹配1个以上的数字。
|
|
15325@qq.com
|
2.0/chapter03/#386 |
2009-10-23 16:06:41
|
这里使用# ...来表示省略了其它可能存在的URL模式定义。
|
|