Django 学习笔记 - 快速完成文章列表
2017-01-04 本文已影响0人
yipliksun
快速完成文章列表
- 创建一个新的小应用 article
- 数据模式
- 管理后台: search_fields
注意:article/admin.py 里面的search_fields
不能搜索外键
URL配置
url --> http://xxx.xxx.xxx/article/lists/1
总url配置 myforum/urls.py
url(r'^article/', include("article.urls"))
- 有include() 交由子目录处理
- 没有include() 处理函数
文章 article/urls.py
url(r'^lists/(?P<block_id>\d+', "article.views.article_list", name="article_list")
- url匹配模式,固定格式,当后面匹配url模式的话,就赋值给一个name的变量,匹配到得参数传入后面的控制器的函数来处理
| (?P <block_id> \d+ )
| (?P <name> pattern )
注意!从html中解析url:
url(r'^lists/(?P<block_id>\d+', "article.views.article_list", name="article_list")
-
{% url 'article_list' block.id %}
通过url名称找到了url配置,带上block.id这个变量 - 通过url配置,把block.id的值替换
<block_id>
,解析出来一个字符串: list/(block.id)
注意!urls.py匹配url,返回页面:
- 把url跟urls配置匹配,如果匹配的话,就交由控制器views.py处理
- 把匹配到的
<block_id>
作为参数,传到article.views.article_list
中 -
article.views.article_list
渲染出一个html
控制器 views.py
block_id
参数,从urls.py匹配到的block_id
传入 views.py 的article_list
函数进行处理
def article_list(request, block_id):
block_id = int(block_id)
block = Block.objects.get(id=block_id)
articles = Article.objects.filter(block=block).order_by("-last_update_timestamp)
# 取出block_id 所指定的板块,Article.block = block ,然后按更新时间倒序排列
# articles 是查询结果集的类型
return render_to_response("article_list.html", {"articles": articles, "block": block})
# 返回一个网页,给网页传入两个参数articles和block
- objects.get() 取一个记录,要求返回的结果,有且只有一个结果!
- objects.filter() 取多个记录,按过滤条件进行筛选
- objects.all() 取所有记录
模板templates
bootstap 简要
jumbotron, 面包屑(breadcrumb)
<div class="jumbotron">...</div>
面包屑(breadcrumb)
<ol class="breadcrumb">
<li><a href="{% url 'block_list' %}"></a></li>
<li class="active">{{ block.name }}</li>
</ol>
- ol 有序列表,orderlist
- {% xxxx xxxx %} django语法固定格式
templates标签
URL名称
url(r'^lists/(?P<block_id>\d+', "article.views.article_list", name="article_list")
# article/urls.py 里面的name就是URL名称
url(r'^$', "block.views.block_list", name="block_list")
# forum/urls.py 里面的name就是url名称
# 这个url没有任何的参数,因为url没有匹配任何的模式,同时在控制器函数里面,除了request之外,也没有其他的参数
django语法:url "URL名称" 位置参数 关键字参数=值|date:"Y-m-d P"
{% url "article_list" block.id %} # 跳转到 http://xxx/lists/<block_id>
- 使用url模板标签反解析参数,不需要写死跳转页面,更加灵活。
- | 过滤器 date:"Y-m-d P" 格式化时间
对于choices枚举的django字段,
get_变量名_status
,把汉字说明输出出来
{{ article.get_status_display }}
html模板的继承,整合html代码到base.html
/templates/base.html 把html相同的部分拿出来。
模板 块标签
{% block content %} {% endblock %}
- block, endblock 块标签开始和结束的标示
- content 快标签的名字
子模板,
block/templates/block_list.html
,article/templates/article_list.html
{% extends "base.html" %} # 必须是第一行
{% block conten %}
...
{% endblock %}
django是如何找打base.html的呢?
在myforum/setting.py中
TEMPLATES = [
{ ...
'DIRS': [ os.path.join(BASE_DIR, "templates" ],
...
}
]
bootstrap 下拉框 需要引入jQuery 和 javascript
<script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>