Tony CHEN |
2.0/chapter02/#308 |
2009-10-30 19:08:48
|
它开始工作了。
|
|
Tony CHEN |
2.0/chapter02/#307 |
2009-10-30 19:08:32
|
你应该可以看到一个令人赏心悦目的的淡蓝色Django欢迎页面。
|
|
Tony CHEN |
2.0/chapter02/#306 |
2009-10-30 19:07:40
|
既然服务器已经运行起来了,现在用网页浏览器访问 <reference name="http://127.0.0.1:8000/" refuri="http://127.0.0.1:8000/">http://127.0.0.1:8000/</reference> 。
|
|
Tony CHEN |
2.0/chapter02/#305 |
2009-10-30 19:07:16
|
这将会启动一个本地服务器,端口号是8000。并且这个服务器只能被你的这台电脑连接和访问。
|
|
Tony CHEN |
2.0/chapter02/#299 |
2009-10-30 19:05:33
|
要运行你的服务器,请切换到你的项目目录里 (<literal>cd mysite</literal> )。如果你还没准备好,那么运行下面的命令:
|
|
Tony CHEN |
2.0/chapter04/#780 |
2009-10-30 19:01:04
|
(如果你是跟着来的话,保存这个文件到你的template目录下,命名为 <literal>base.html</literal> .)
|
|
Tony CHEN |
2.0/chapter04/#730 |
2009-10-30 18:59:51
|
若果碰到一个没有定义名字的 <literal>{% include %}</literal>标签,Django将会在下面两个处理方法中选择一个:
|
|
Tony CHEN |
2.0/chapter04/#728 |
2009-10-30 18:56:19
|
如果你用一个包含 <literal>current_section</literal>的上下文去渲染 <literal>mypage.html</literal>这个模板文件,这个变量将存在于它所包含(include)的模板里,就像你想象的那样。
|
|
Tony CHEN |
2.0/chapter04/#725 |
2009-10-30 18:53:39
|
举例说,考虑下面两个模板文件:
|
|
Tony CHEN |
2.0/chapter04/#699 |
2009-10-30 18:53:04
|
只要你喜欢,用多少层的子目录都无所谓。
|
|
Tony CHEN |
2.0/chapter04/#646 |
2009-10-30 18:51:57
|
这是一个普遍存在的重复苦力劳动。Django为此提供了一个捷径,让你一次性地载入某个模板文件,渲染它,然后将此作为
<literal>HttpResponse</literal>返回。
|
|
Tony CHEN |
2.0/chapter04/#645 |
2009-10-30 18:49:25
|
但这仍然需要一定量的时间来敲出这些简化的代码。
|
|
Tony CHEN |
2.0/chapter04/#644 |
2009-10-30 18:48:23
|
我们已经优化了方案,使用 <literal>get_template()</literal> 方法代替繁杂的用代码来处理模板及其路径的工作。
|
|
Tony CHEN |
2.0/chapter04/#625 |
2009-10-30 18:45:14
|
接着,告诉你的浏览器,使其定位到指定页面以激活<literal>current_datetime</literal>视图(如 <literal>http://127.0.0.1:8000/time/</literal> )。假设你的
<literal>DEBUG</literal>项设置为 <literal>True</literal>,而你有没有建立<literal>current_datetime.html</literal> 这个模板文件,你会看到Django的错误提示网页,告诉你发生了
<literal>TemplateDoesNotExist</literal> 错误。
|
|
Tony CHEN |
2.0/chapter04/#621 |
2009-10-30 18:40:52
|
要定位某个模板文件在你的系统里的位置, <literal>get_template()</literal>方法会自动为你连接已经设置的 <literal>TEMPLATE_DIRS</literal>目录和你传入该法的模板名称参数。比如,你的 <literal>TEMPLATE_DIRS</literal>目录设置为
<literal>'/home/django/mysite/templates'</literal>,上面的 <literal>get_template()</literal>调用就会为你找到 <literal>/home/django/mysite/templates/current_datetime.html</literal> 这样一个位置。
|
|
Tony CHEN |
2.0/chapter04/#574 |
2009-10-30 18:35:00
|
它的默认设置是一个空元组(tuple),加上一些自动生成的注释。
|
|
Tony CHEN |
2.0/chapter04/#609 |
2009-10-30 18:02:12
|
如果你在这里引入了语法错误,或运行错误,你的Django-powered站点将很可能就要被崩溃掉。
|
|
Tony CHEN |
2.0/chapter04/#643 |
2009-10-30 17:59:26
|
我们已经告诉你如何载入一个模板文件,然后用 <literal>Context</literal>渲染它,最后返回这个处理好的<literal>HttpResponse</literal>对象给用户。
|
|
Tony CHEN |
2.0/chapter04/#629 |
2009-10-30 17:57:31
|
模板文件无法找到时,将会发送提示错误的网页给用户。
|
|
Tony CHEN |
2.0/chapter04/#619 |
2009-10-30 17:56:17
|
你可以选择任意后缀的任意文件,只要是符合逻辑的都行。甚至选择没有后缀的文件也不会有问题。
|
|
Tony CHEN |
2.0/chapter04/#618 |
2009-10-30 17:54:13
|
在这个例子里,我们选择的模板文件是<literal>current_datetime.html</literal>,但这个与<literal>.html</literal>后缀没有直接的联系。
|
|
Tony CHEN |
2.0/chapter04/#608 |
2009-10-30 17:51:52
|
在这里我们面对的是动态语言python代码,我需要提醒你的是,不要在你的设置文件里写入错误的代码,这很重要。
|
|
Tony CHEN |
2.0/chapter04/#606 |
2009-10-30 17:48:07
|
<literal> os.path.dirname(__file__)</literal> 将会获取自身所在的文件,即<literal>settings.py</literal> 所在的目录,然后由<literal>os.path.join</literal> 这个方法将这目录与 <literal>templates</literal> 进行连接。如果在windows下,它会智能地选择正确的后向斜杠"\"进行连接,而不是前向斜杠"/"。
|
|
Tony CHEN |
2.0/chapter04/#591 |
2009-10-30 17:39:52
|
Good:
|
|
Tony CHEN |
2.0/chapter04/#588 |
2009-10-30 17:39:31
|
Bad:
|
|
Tony CHEN |
2.0/chapter04/#573 |
2009-10-30 17:35:24
|
如果你是一步步跟随我们学习过来的,马上打开你的<literal>settings.py</literal>配置文件,找到<literal>TEMPLATE_DIRS</literal>这项设置吧。
|
|
Tony CHEN |
2.0/chapter06/#24 |
2009-10-30 15:08:46
|
django.contrib 包
|
|
Tony CHEN |
2.0/chapter06/#5 |
2009-10-30 14:43:16
|
一些常见的例子:
|
|
Tony CHEN |
2.0/chapter04/#602 |
2009-10-30 14:30:24
|
例如:
|
|
Tony CHEN |
2.0/chapter04/#586 |
2009-10-30 14:30:11
|
如果你的 <literal>TEMPLATE_DIRS</literal>只包含一个目录,别忘了在该目录后加上个逗号。
|
|
Tony CHEN |
2.0/chapter04/#784 |
2009-10-30 14:27:41
|
每个<literal>{% block %}</literal>标签所要做的是告诉模板引擎,该模板下的这一块内容将有可能被子模板覆盖。
|
|
Tony CHEN |
2.0/chapter04/#802 |
2009-10-30 14:24:38
|
所以,网页标题一块将由 <literal>{% block title %}</literal>替换,同样地,网页的内容一块将由 <literal>{% block
content %}</literal>替换。
|
|
Tony CHEN |
2.0/chapter04/#808 |
2009-10-30 14:23:00
|
换句话说,任何处在继承树上的模板,将可以访问到你传到模板中的每一个模板变量。
|
|
Tony CHEN |
2.0/chapter04/#807 |
2009-10-30 14:20:55
|
继承并不会影响到模板的上下文。
|
|
Tony CHEN |
2.0/chapter04/#810 |
2009-10-30 14:20:24
|
你可以根据需要使用任意多的继承次数。
|
|
Tony CHEN |
2.0/chapter04/#834 |
2009-10-30 14:19:23
|
如果你需要访问父模板中的块的内容,使用 <literal>{{
block.super }}</literal>这个标签吧,这一个魔法变量将会表现出父模板中的内容。
|
|
Tony CHEN |
2.0/chapter04/#571 |
2009-10-30 14:14:41
|
设置的保存文件就是我们前一章节中提到的
<literal>settings.py</literal>,在讲述
<literal>ROOT_URLCONF</literal>配置的时候。
|
|
Tony CHEN |
2.0/chapter04/#564 |
2009-10-30 14:12:02
|
为了解决这些问题,我们采用了 <emphasis>模板自加载</emphasis> 跟 <emphasis>模板目录</emphasis> 的技巧.
|
|
Tony CHEN |
2.0/chapter04/#504 |
2009-10-30 14:09:26
|
你将在后续的“视图中应用模板”这一章节中看到,你还可以非常容易地在Django中使用其他的模板语言。
|
|
Tony CHEN |
2.0/chapter04/#503 |
2009-10-30 14:07:53
|
因为Django 虽然被设计成一个FULL-Stack的Web框架,它提供了开发者所必需的所有组件,而且在大多数情况 使用Django模板系统会比其他的Python模板库要 <emphasis>更方便</emphasis> 一点,但是并不是严格要求你必须使用 它。
|
|
Tony CHEN |
2.0/chapter04/#495 |
2009-10-30 14:06:23
|
相对与其他的网络应用的组件,模板的语法很具观性,因此可供程序员的选择方案也很广泛。
|
|
Tony CHEN |
2.0/chapter04/#464 |
2009-10-30 14:03:06
|
过滤管道可以被<emphasis> 套接</emphasis> ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入,如此下去。
|
|
Tony CHEN |
2.0/chapter04/#448 |
2009-10-30 13:58:41
|
用这种语法的注释不能跨越多行。
|
|
Tony CHEN |
2.0/chapter04/#409 |
2009-10-30 13:57:35
|
模板的语法分析器在遇到<literal>{% endfor %}</literal>标签后,就会结束 <literal>forloop</literal>循环。
|
|
Tony CHEN |
2.0/chapter04/#401 |
2009-10-30 13:53:15
|
另一个常见的用途是为列表的每个单词的加上逗号。
|
|
Tony CHEN |
2.0/chapter04/#398 |
2009-10-30 13:51:27
|
上面的模板可能会产生如下的结果:
|
|
Tony CHEN |
2.0/chapter04/#342 |
2009-10-30 13:50:31
|
请使用嵌套的<literal> {% if %}</literal> 标签来达成同样的效果:
|
|
Tony CHEN |
2.0/chapter04/#341 |
2009-10-30 13:50:01
|
并没有 <literal>{% elif %}</literal> 标签,
|
|
Tony CHEN |
2.0/chapter04/#334 |
2009-10-30 13:49:29
|
或者,仅仅用嵌套的<literal>{% if %}</literal>标签替换吧,就像这样:
|
|
Tony CHEN |
2.0/chapter04/#333 |
2009-10-30 13:47:24
|
如果你确实需要用到圆括号来组合表达你的逻辑式,考虑将它移到模板之外处理,然后以模板变量的形式传入结果吧。
|
|