Django 學(xué)習(xí)筆記 - 快速完成文章列表

快速完成文章列表

  1. 創(chuàng)建一個(gè)新的小應(yīng)用 article
  2. 數(shù)據(jù)模式
  3. 管理后臺(tái): 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() 處理函數(shù)

文章 article/urls.py

url(r'^lists/(?P<block_id>\d+', "article.views.article_list", name="article_list")
  • url匹配模式,固定格式,當(dāng)后面匹配url模式的話,就賦值給一個(gè)name的變量,匹配到得參數(shù)傳入后面的控制器的函數(shù)來處理
    | (?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這個(gè)變量
  2. 通過url配置,把block.id的值替換<block_id>,解析出來一個(gè)字符串: list/(block.id)

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

  1. 把url跟urls配置匹配,如果匹配的話,就交由控制器views.py處理
  2. 把匹配到的<block_id>作為參數(shù),傳到article.views.article_list
  3. article.views.article_list 渲染出一個(gè)html

控制器 views.py

block_id 參數(shù),從urls.py匹配到的block_id傳入 views.py 的article_list函數(shù)進(jìn)行處理

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 ,然后按更新時(shí)間倒序排列
    # articles 是查詢結(jié)果集的類型
    return render_to_response("article_list.html", {"articles": articles, "block": block})
    # 返回一個(gè)網(wǎng)頁,給網(wǎng)頁傳入兩個(gè)參數(shù)articles和block
  • objects.get() 取一個(gè)記錄,要求返回的結(jié)果,有且只有一個(gè)結(jié)果!
  • objects.filter() 取多個(gè)記錄,按過濾條件進(jìn)行篩選
  • 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標(biāo)簽

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名稱
# 這個(gè)url沒有任何的參數(shù),因?yàn)閡rl沒有匹配任何的模式,同時(shí)在控制器函數(shù)里面,除了request之外,也沒有其他的參數(shù)

django語法:url "URL名稱" 位置參數(shù) 關(guān)鍵字參數(shù)=值|date:"Y-m-d P"

{% url "article_list" block.id %}  # 跳轉(zhuǎn)到 http://xxx/lists/<block_id>
  • 使用url模板標(biāo)簽反解析參數(shù),不需要寫死跳轉(zhuǎn)頁面,更加靈活。
  • | 過濾器 date:"Y-m-d P" 格式化時(shí)間

對于choices枚舉的django字段,get_變量名_status,把漢字說明輸出出來

{{ article.get_status_display }}

html模板的繼承,整合html代碼到base.html

/templates/base.html 把html相同的部分拿出來。

模板 塊標(biāo)簽

{% block content %} {% endblock %}
  • block, endblock 塊標(biāo)簽開始和結(jié)束的標(biāo)示
  • content 快標(biāo)簽的名字

子模板, 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>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容