Django 学习笔记 - 快速完成文章列表

快速完成文章列表

  1. 创建一个新的小应用 article
  2. 数据模式
  3. 管理后台: 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\d+', "article.views.article_list", name="article_list")
  • url匹配模式,固定格式,当后面匹配url模式的话,就赋值给一个name的变量,匹配到得参数传入后面的控制器的函数来处理
    | (?P \d+ )
    | (?P pattern )

注意!从html中解析url:

url(r'^lists/(?P\d+', "article.views.article_list", name="article_list")
  1. {% url 'article_list' block.id %} 通过url名称找到了url配置,带上block.id这个变量
  2. 通过url配置,把block.id的值替换,解析出来一个字符串: list/(block.id)

注意!urls.py匹配url,返回页面:

  1. 把url跟urls配置匹配,如果匹配的话,就交由控制器views.py处理
  2. 把匹配到的作为参数,传到article.views.article_list
  3. 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)

...

面包屑(breadcrumb)


  • ol 有序列表,orderlist
  • {% xxxx xxxx %} django语法固定格式

templates标签

URL名称

url(r'^lists/(?P\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/
  • 使用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


你可能感兴趣的:(Django 学习笔记 - 快速完成文章列表)