From 0bcda0d66407bb7ab0933477a804580f553e567b Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Fri, 11 Sep 2015 14:41:02 +0800 Subject: [PATCH] 9.11 --- 1_1_1_Django at a glance.md | 6 +++--- 1_2_2_Part 2 The admin site.md | 2 +- 1_2_3_Part 3 Views and templates.md | 10 +++++----- 1_2_4_Part 4 Forms and generic views.md | 4 ++-- 1_2_6_Part 6 Static files.md | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/1_1_1_Django at a glance.md b/1_1_1_Django at a glance.md index 69ed26a..04418de 100644 --- a/1_1_1_Django at a glance.md +++ b/1_1_1_Django at a glance.md @@ -200,13 +200,13 @@ Django 有一个模板搜索路径板,它让你尽可能的减少冗余而重 {% endfor %} {% endblock %} ``` -变量使用双花括号包围。``{{ article.headline }}`` 表示 “输出 article 的 headline 属性”。而点符号不仅用于表示属性查找,还可用于字典的键值查找、索引查找和函数调用。 +变量使用双花括号包围。`{{ article.headline }} 表示 “输出 article 的 headline 属性”。而点符号不仅用于表示属性查找,还可用于字典的键值查找、索引查找和函数调用。 -注意 {{ article.pub_date|date:"F j, Y" }} 使用了 Unix 风格的“管道”(“|”符合)。这就是所谓的模板过滤器,一种通过变量来过滤值的方式。本例中,Python datetime 对象被过滤成指定的格式(在 PHP 的日期函数中可以见到这种变换)。 +注意 `{{ article.pub_date|date:"F j, Y" }}` 使用了 Unix 风格的“管道”(“|”符合)。这就是所谓的模板过滤器,一种通过变量来过滤值的方式。本例中,Python datetime 对象被过滤成指定的格式(在 PHP 的日期函数中可以见到这种变换)。 你可以无限制地串联使用多个过滤器。你可以编写自定义的过滤器。你可以定制自 己的模板标记,在幕后运行自定义的 Python 代码。 -最后,Django 使用了“模板继承”的概念:这就是 {% extends "base.html" %} 所做的事。它意味着 “首先载入名为 ‘base’ 的模板中的内容到当前模板,然后再处理本模板中的其余内容。”总之,模板继承让你在模板间大大减少冗余内容:每一个模板只需要定义它独特的部分即可。 +最后,Django 使用了“模板继承”的概念:这就是 `{% extends "base.html" %}` 所做的事。它意味着 “首先载入名为 ‘base’ 的模板中的内容到当前模板,然后再处理本模板中的其余内容。”总之,模板继承让你在模板间大大减少冗余内容:每一个模板只需要定义它独特的部分即可。 下面是使用了 *静态文件* 的 “base.html” 模板的大概样子: diff --git a/1_2_2_Part 2 The admin site.md b/1_2_2_Part 2 The admin site.md index 0d42a6e..3e16f04 100644 --- a/1_2_2_Part 2 The admin site.md +++ b/1_2_2_Part 2 The admin site.md @@ -342,7 +342,7 @@ print(django.__path__)" 然后,只需要编辑该文件并将通用的 Djangot 文字替换为你认为适合的属于你自己的网站名。 -该模板包含了大量的文字,比如 {% block branding %} 和 {{ title }}``。``{% 和 {{ 标记是 Django 模板语言的一部分。 当 Django 呈现 admin/base_site.html 时,根据模板语言生成最终的 HTML 页面。 Don’t worry if you can’t make any sense of the template right now – 如果你现在不能理解模板的含义先不用担心 – 我们将在教程 3 中深入探讨 Django’ 的模板语言。 +该模板包含了大量的文字,比如 `{% block branding %}` 和 `{{ title }}`。`{%` 和 `{{` 标记是 Django 模板语言的一部分。 当 Django 呈现 admin/base_site.html 时,根据模板语言生成最终的 HTML 页面。 Don’t worry if you can’t make any sense of the template right now – 如果你现在不能理解模板的含义先不用担心 – 我们将在教程 3 中深入探讨 Django’ 的模板语言。 请注意 Django 默认的管理网站中的任何模板都是可覆盖的。 要覆盖一个模板,只需要像刚才处理 base_site.html 一样 – 从默认的目录下复制到你的自定义目录下,并修改它。 diff --git a/1_2_3_Part 3 Views and templates.md b/1_2_3_Part 3 Views and templates.md index abc4eb5..165932a 100644 --- a/1_2_3_Part 3 Views and templates.md +++ b/1_2_3_Part 3 Views and templates.md @@ -333,9 +333,9 @@ get_object_or_404() 函数需要一个 Django 模型类作为第一个参数以 ``` -模板系统使用了“变量.属性”的语法访问变量的属性值。 例如 {{ poll.question }} , 首先 Django 对 poll 对象做字典查询。 否则 Django 会尝试属性查询 – 在本例中属性查询成功了。 如果属性查询还是失败了,Django 将尝试 list-index 查询。 +模板系统使用了“变量.属性”的语法访问变量的属性值。 例如 `{{ poll.question }}` , 首先 Django 对 poll 对象做字典查询。 否则 Django 会尝试属性查询 – 在本例中属性查询成功了。 如果属性查询还是失败了,Django 将尝试 list-index 查询。 -在 {% for %} 循环中有方法调用: poll.choice_set.all 就是 Python 代码 poll.choice_set.all(),它将返回一组可迭代的 Choice 对象,可以用在 {% for %} 标签中。 +在 `{% for %}` 循环中有方法调用: poll.choice_set.all 就是 Python 代码 poll.choice_set.all(),它将返回一组可迭代的 Choice 对象,可以用在 `{% for %}` 标签中。 请参阅 模板指南 来了解模板的更多内容。 @@ -347,7 +347,7 @@ get_object_or_404() 函数需要一个 Django 模型类作为第一个参数以
  • {{ poll.question }}
  • ``` -问题出在硬编码,紧耦合使得在大量的模板中修改 URLs 成为富有挑战性的项目。 不过,既然你在 polls.urls 模块中的 url() 函数中定义了 命名参数,那么就可以在 url 配置中使用 {% url %} 模板标记来移除特定的 URL 路径依赖: +问题出在硬编码,紧耦合使得在大量的模板中修改 URLs 成为富有挑战性的项目。 不过,既然你在 polls.urls 模块中的 url() 函数中定义了 命名参数,那么就可以在 url 配置中使用 `{% url %}` 模板标记来移除特定的 URL 路径依赖: ```
  • {{ poll.question }}
  • @@ -355,7 +355,7 @@ get_object_or_404() 函数需要一个 Django 模型类作为第一个参数以 > Note > -> 如果 {% url 'detail' poll.id %} (含引号) 不能运行,但是 {% url detail poll.id %} (不含引号) 却能运行,那么意味着你使用的 Djang 低于 < 1.5 版。这样的话,你需要在模板文件的顶部添加如下的声明:: +> 如果 `{% url 'detail' poll.id %}` (含引号) 不能运行,但是 `{% url detail poll.id %}` (不含引号) 却能运行,那么意味着你使用的 Djang 低于 < 1.5 版。这样的话,你需要在模板文件的顶部添加如下的声明:: > ``` {% load url from future %} @@ -382,7 +382,7 @@ url(r'^specifics/(?P\d+)/$', views.detail, name='detail'), ## URL 名称的命名空间 ## -本教程中的项目只有一个应用:``polls`` 。在实际的 Django 项目中,可能有 5、10、20 或者 更多的应用。Django 是如何区分它们的 URL 名称的呢?比如说,``polls`` 应用有一个 detail 视图,而可能会在同一个项目中是一个博客应用的视图。Django 是如何知道 使用 {% url %} 模板标记创建应用的 url 时选择正确呢? +本教程中的项目只有一个应用:``polls`` 。在实际的 Django 项目中,可能有 5、10、20 或者 更多的应用。Django 是如何区分它们的 URL 名称的呢?比如说,``polls`` 应用有一个 detail 视图,而可能会在同一个项目中是一个博客应用的视图。Django 是如何知道 使用 `{% url %}` 模板标记创建应用的 url 时选择正确呢? 答案是在你的 root URLconf 配置中添加命名空间。在 mysite/urls.py 文件 (项目的 ``urls.py``,不是应用的) 中,修改为包含命名空间的定义: diff --git a/1_2_4_Part 4 Forms and generic views.md b/1_2_4_Part 4 Forms and generic views.md index fd7dab4..a20a507 100644 --- a/1_2_4_Part 4 Forms and generic views.md +++ b/1_2_4_Part 4 Forms and generic views.md @@ -23,9 +23,9 @@ 简单的总结下: + 上面的模板中为每个投票选项设置了一个单选按钮。每个单选按钮的 value 是投票选项对应的 ID 。每个单选按钮的 name 都是 ``“choice”``。这意味着,当有人选择了一个单选按钮并提交了表单,将会发送 的 POST 数据是 ``choice=3``。这是 HTML 表单中的基本概念。 -+ 我们将 form 的 action 设置为 {% url 'polls:vote' poll.id %}``,以及设置了 ``method="post" 。使用 method="post" ( 而不是 method="get") 是非常重要的,因为这种提交表单的方式会改变服务器端的数据。 当你创建一个表单为了修改服务器端的数据时,请使用 method="post" 。这不是 Django 特定的技巧;这是优秀的 Web 开发实践。 ++ 我们将 form 的 action 设置为 `{% url 'polls:vote' poll.id %},以及设置了 `method="post"` 。使用 method="post" ( 而不是 method="get") 是非常重要的,因为这种提交表单的方式会改变服务器端的数据。 当你创建一个表单为了修改服务器端的数据时,请使用 method="post" 。这不是 Django 特定的技巧;这是优秀的 Web 开发实践。 + forloop.counter 表示 for 标签在循环中已经循环过的次数 -+ 由于我们要创建一个POST form ( 具有修改数据的功能 ),我们需要担心跨站点请求伪造 ( Cross Site Request Forgeries )。 值得庆幸的是,你不必太担心这一点,因为 Django 自带了一个非常容易使用的系统来防御它。 总之,所有的 POST form 针对内部的 URLs 时都应该使用 {% csrf_token %} 模板标签。 ++ 由于我们要创建一个POST form ( 具有修改数据的功能 ),我们需要担心跨站点请求伪造 ( Cross Site Request Forgeries )。 值得庆幸的是,你不必太担心这一点,因为 Django 自带了一个非常容易使用的系统来防御它。 总之,所有的 POST form 针对内部的 URLs 时都应该使用 `{% csrf_token %}` 模板标签。 现在,让我们来创建一个 Django 视图来处理提交的数据。 记得吗?在 教程 第3部分 中,我们为 polls 应用创建了一个 URLconf 配置中包含有这一行代码: diff --git a/1_2_6_Part 6 Static files.md b/1_2_6_Part 6 Static files.md index 3440478..d6d5803 100644 --- a/1_2_6_Part 6 Static files.md +++ b/1_2_6_Part 6 Static files.md @@ -38,7 +38,7 @@ polls/templates/polls/index.html ``` -{% load staticfiles %} 从staticfiles模板库加载{% static %} 模板标签。{% static %}模板标签会生成静态文件的绝对URL。 +`{% load staticfiles %}` 从staticfiles模板库加载`{% static %}` 模板标签。`{% static %}`模板标签会生成静态文件的绝对URL。 这就是你在开发过程中,所需要对静态文件做的所有处理。 重新加载 http://localhost:8000/polls/ ,你应该会看到Question的超链接变成了绿色(Django的风格!),这意味着你的样式表被成功导入。 @@ -59,7 +59,7 @@ body { > 警告: > -> 当然,{% static %}模板标签不能用在静态文件(比如样式表)中,因为他们不是由Django生成的。 你应该永远使用相对路径来相互链接静态文件,因为这样你可以改变STATIC_URL ( static模板标签用它来生成URLs)而不用同时修改一大堆静态文件的路径。 +> 当然,`{% static %}`模板标签不能用在静态文件(比如样式表)中,因为他们不是由Django生成的。 你应该永远使用相对路径来相互链接静态文件,因为这样你可以改变STATIC_URL ( static模板标签用它来生成URLs)而不用同时修改一大堆静态文件的路径。 这些知识基础。关于静态文件设置的更多细节和框架中包含的其它部分,参见静态文件 howto 和静态文件参考。部署静态文件讨论如何在真实的服务器上使用静态文件。 -- GitLab