美文网首页
Django 学习笔记 - 快速完成文章列表

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

作者: yipliksun | 来源:发表于2017-01-04 00:05 被阅读0次

    快速完成文章列表

    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<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")
    
    1. {% url 'article_list' block.id %} 通过url名称找到了url配置,带上block.id这个变量
    2. 通过url配置,把block.id的值替换<block_id>,解析出来一个字符串: list/(block.id)

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

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

    <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>

    相关文章

      网友评论

          本文标题:Django 学习笔记 - 快速完成文章列表

          本文链接:https://www.haomeiwen.com/subject/qpxovttx.html