ySJ
|
2.0/chapter04/#621 |
2010-04-09 16:14:26
|
要确定某个模板文件在你的系统里的位置, <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> 这样一个位置。
|
|
ySJ
|
2.0/chapter04/#583 |
2010-04-09 16:05:53
|
你可以任意指定想要的目录,只要运行 Web 服务器的用户可以读取该目录的子目录和模板文件。
|
|
ySJ
|
2.0/chapter04/#571 |
2010-04-09 16:04:11
|
设置的保存文件就是我们前一章节讲述<literal>ROOT_URLCONF</literal>配置的时候提到的
<literal>settings.py</literal>。
|
|
ySJ
|
2.0/chapter04/#525 |
2010-04-09 15:58:10
|
<emphasis>假定设计师不是 Python 程序员</emphasis> 。模板系统开发人员认为:模板通常由设计师而非程序员来编写,因此不应被假定拥有Python开发知识。
|
|
ySJ
|
2.0/chapter04/#495 |
2010-04-09 15:47:54
|
相对与其他的网络应用的组件,模板的语法很具主观性,因此可供程序员的选择方案也很广泛。
|
|
ySJ
|
2.0/chapter04/#475 |
2010-04-09 15:45:27
|
以下几个是最为重要的过滤器的一部分。
|
|
ySJ
|
2.0/chapter04/#435 |
2010-04-09 15:38:02
|
其他任何类型,例如Python的字典类型、列表类型、布尔类型,不能用在 <literal>{% ifequal %}</literal> 中。 下面是些错误的例子:
|
|
ySJ
|
2.0/chapter04/#432 |
2010-04-09 15:37:30
|
只有模板变量,字符串,整数和小数可以作为 <literal>{% ifequal %}</literal> 标签的参数。下面是合法参数的例子:
|
|
ySJ
|
2.0/chapter04/#432 |
2010-04-09 15:37:12
|
只有模板变量,字符串,整数和小数可以作为 <literal>{% ifequal %}</literal> 标签的参数。下面是例子:
|
|
ySJ
|
2.0/chapter04/#421 |
2010-04-09 15:36:09
|
<literal>{% ifequal %}</literal> 标签比较两个值,当他们相等时,显示在 <literal>{% ifequal %}</literal> 和 <literal>{% endifequal %}</literal> 之中所有的值。
|
|
ySJ
|
2.0/chapter04/#409 |
2010-04-09 15:33:09
|
在模板解析器碰到<literal>{% endfor %}</literal>标签后,<literal>forloop</literal>就不可访问了。
|
|
ySJ
|
2.0/chapter04/#408 |
2010-04-09 15:31:03
|
<literal>forloop</literal> 变量仅仅能够在循环中使用。
|
|
ySJ
|
2.0/chapter04/#391 |
2010-04-09 15:27:47
|
在下面的情形中这个变量是很有用的:
|
|
ySJ
|
2.0/chapter04/#390 |
2010-04-09 15:27:17
|
<literal>forloop.first</literal> 是一个布尔值,如果该迭代是第一次执行,那么它被置为<literal></literal> |
|
ySJ
|
2.0/chapter04/#338 |
2010-04-09 15:20:26
|
例如,这是合法的:
|
|
ySJ
|
2.0/chapter04/#284 |
2010-04-09 15:16:05
|
多数时间,你可以通过传递一个完全填充(full populated)的字典给 <literal>Context()</literal> 来初始化 <literal>上下文(Context)</literal> 。 但是初始化以后,你也可以使用标准的Python字典语法(syntax)向``上下文(Context)`` 对象添加或者删除条目:
|
|
ySJ
|
2.0/chapter04/#274 |
2010-04-09 15:12:30
|
默认情况下,如果一个变量不存在,模板系统会把它展示为空字符串,不做任何事情来表示失败。
|
|
ySJ
|
2.0/chapter04/#274 |
2010-04-09 15:11:07
|
默认情况下,如果一个变量不存在,模板系统会把它展示为空字符串,不做任何事情来表示失败,例如:
|
|
ySJ
|
2.0/chapter04/#263 |
2010-04-09 15:09:47
|
如果某个模板中包含了像 <literal>{{ account.delete }}</literal>这样的标签,其中<literal> account</literal> 又是<literal>BankAccount</literal> 的一个实例,请注意在这个模板载入时,account对象将被删除。
|
|
ySJ
|
2.0/chapter04/#254 |
2010-04-09 15:06:59
|
在方法查找过程中,如果某方法抛出一个异常,除非该异常有一个 <literal>silent_variable_failure</literal> 属性并且值为 <literal>True</literal> ,否则的话它将被传播。如果异常被传播,模板里的指定变量会被置为空字符串,比如:
|
|
ySJ
|
2.0/chapter04/#242 |
2010-04-09 14:59:22
|
系统使用找到的第一个有效类型。
|
|
ySJ
|
2.0/chapter04/#229 |
2010-04-09 14:58:25
|
第一项的索引是0,第二项的是1,依此类推。
|
|
ySJ
|
2.0/chapter04/#217 |
2010-04-09 14:56:26
|
(我们将在本章稍后部分解释该设计观。)
|
|
ySJ
|
2.0/chapter04/#136 |
2010-04-09 14:36:48
|
你可以通过字符串前的<literal>u</literal>来区分。
|
|
ySJ
|
2.0/chapter04/#91 |
2010-04-09 14:29:10
|
当你运行命令:python manage.py shell,它将自动帮你处理DJANGO_SETTINGS_MODULE。
|
|
ySJ
|
2.0/chapter04/#61 |
2010-04-09 14:09:56
|
通常你会将模板和视图一起使用,但是我们只是想突出模板系统是一个Python库,你可以在任何地方使用它,而不仅仅是在Django视图中。)
|
|
ySJ
|
2.0/chapter04/#58 |
2010-04-09 14:08:59
|
让我们深入研究模板系统,你将会明白它是如何工作的。但我们暂不打算将它与先前创建的视图结合在一起,因为我们现在的目的是了解它是如何独立工作的。
|
|
ySJ
|
2.0/chapter04/#35 |
2010-04-09 13:56:44
|
用两个大括号括起来的文字(例如 <literal>{{ person_name }}</literal> )称为 <emphasis>变量(variable)</emphasis> 。这意味着在此处插入指定变量的值。
|
|
ySJ
|
2.0/chapter04/#16 |
2010-04-09 13:44:26
|
程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。
|
|
ySJ
|
2.0/chapter04/#4 |
2010-04-09 13:37:30
|
也就是说,HTML被直接硬编码在 Python 代码之中。
|
|
ySJ
|
2.0/chapter03/#551 |
2010-04-09 13:23:58
|
幸运的是,Django内建有一个简单又强大的模板处理引擎来让你从潜在的编码中分离出页面的设计工作。
|
|
ySJ
|
2.0/chapter03/#539 |
2010-04-09 13:20:44
|
不怀好意的人会尝试使用它攻击你的 Web 应用程序,做些讨厌的事情。
|
|
ySJ
|
2.0/chapter03/#534 |
2010-04-09 13:19:07
|
然后,你就可以看到局部变量和程序的状态了。
|
|
ySJ
|
2.0/chapter03/#525 |
2010-04-09 13:17:32
|
附录D包含了所有可用的设置。)
|
|
ySJ
|
2.0/chapter03/#521 |
2010-04-09 13:16:55
|
在附录G里给出了request的对象的 完整参考。
|
|
ySJ
|
2.0/chapter03/#504 |
2010-04-09 13:14:56
|
这类似于你在 Python 命令行解释器中获得的追踪信息,只不过后者更具交互性。
|
|
ySJ
|
2.0/chapter03/#451 |
2010-04-09 13:06:00
|
变量名是无关紧要的,重要的是它的位置,它是这个函数的第二个参数,在 <literal>request</literal> 的后面。(也可以使用关键字代替位置指定变量的值。
|
|
ySJ
|
2.0/chapter03/#452 |
2010-04-09 13:05:29
|
我们将在第八章学习。)
|
|
ySJ
|
2.0/chapter03/#451 |
2010-04-09 13:04:38
|
变量名是无关紧要的,重要的是它的位置,它是这个函数的第二个参数,在 <literal>request</literal> 的后面。(也可以使用关键字代替位置。)
|
|
ySJ
|
2.0/chapter03/#450 |
2010-04-09 13:02:20
|
在这里我们命名变量为 <literal>offset</literal> ,你也可以任意命名它,只要它是一个合法的Python 标识符。
|
|
ySJ
|
2.0/chapter03/#426 |
2010-04-09 12:57:34
|
如果你更偏向于一个自底向上的开发者,你可能更喜欢先写视图, 然后把它们挂接到URL上。
|
|
ySJ
|
2.0/chapter03/#424 |
2010-04-09 12:56:39
|
这样做的好处是为你提供了一个清晰的to-do list,并且基本上确定了你所需要编写的视图函数的变量要求。
|
|
ySJ
|
2.0/chapter03/#423 |
2010-04-09 12:53:55
|
如果你喜欢从总体上来把握事物,那么对你来说,最有意义的做法可能是在项目开始的时候就写下所有的URL配置,然后再完成视图的编写。
|
|
ySJ
|
2.0/chapter03/#387 |
2010-04-09 11:29:34
|
来表示省略了其它可能存在的URL模式定义。)
|
|
ySJ
|
2.0/chapter03/#386 |
2010-04-09 11:29:25
|
(这里使用# ...
|
|
ySJ
|
2.0/chapter03/#386 |
2010-04-09 11:29:13
|
(这里使用# ...来表示省略了其它可能存在的URL模式定义。)
|
|
ySJ
|
2.0/chapter03/#376 |
2010-04-09 11:26:30
|
你 <emphasis>可以</emphasis> 在Django里也这样做 (我们稍后会在第七章告诉你怎么做), 但是Django的一个核心理念就是URL必须看起来漂亮。
|
|
ySJ
|
2.0/chapter03/#373 |
2010-04-09 11:25:35
|
如果你有其它Web平台的开发经验(如PHP或Java),你可能会想:嘿!让我们用查询字符串参数吧!
|
|
ySJ
|
2.0/chapter03/#357 |
2010-04-09 11:23:28
|
然而在大多数动态web应用中,URL通常都包含能够影响输出内容的参数。
|
|
ySJ
|
2.0/chapter03/#345 |
2010-04-09 11:21:46
|
此外,如果我们想把这个函数到 <emphasis>不止一个</emphasis> URL, 我们只需要修改URL配置而不用 去改动视图的代码。
|
|