>[success] # 頁面展示整理
~~~
1.根據model,構建我們搭建的,一下幾個頁面的展示:
博客首頁
博文詳情頁
分類列表頁
標簽列表頁
友鏈展示頁
2.根據上面劃分,講view 頁劃分如下
列表view——根據不同的查詢條件分別展示:首頁,分類列表頁,標簽列表頁
文章頁view —— 展示文章頁
友鏈頁view —— 展示所有友情鏈接
~~~
>[danger] ##### urls.py 創建
`在全局url創建`
~~~
from django.conf.urls import url
from django.contrib import admin
from blog.views import post_list, post_detail
from config.views import links
from .custom_site import custom_site
urlpatterns = [
url(r"^$", post_list),
url(r'^category/(?P<category_id>\d+)/$', post_list, name="category"),
url(r'^tag/(?P<tag_id>\d+)/$', post_list),
url(r'^post/(?P<post_id>\d+)/$', post_detail,name="detail"),
url(r'^links/$', links),
url(r'^admin/', admin.site.urls),
url(r'^cus_admin/', custom_site.urls),
]
~~~
>[danger] ##### view.py
`blog目錄下的views.py`
~~~
from django.shortcuts import render
def post_list(request, category_id=None, tag_id=None):
return render(request, 'blog/list.html', context={'name': 'post_list'})
def post_detail(request, post_id=None):
return render(request, 'blog/detail.html', context={'name': 'post_detail'})
~~~
>[danger] ##### templates
~~~
list.html文件如下:
<h1>list</h1>
{{ name }}
detail.html文件如下:
<h1>detail</h1>
{{ name }}
~~~
>[danger] ##### templates 報錯處理
~~~
TemplateDoesNotExist at /
blog/list.html
~~~
* 根據提示分析

* 處理問題所在位置

* 另一種處理
~~~
這個時候你就要看看它有沒有去查找你放模板文件的目錄,如果沒有,那說明你
的模板不在它的查找范圍,你需要去配置APP_INSTALL,如果它列出了你防止模
板的app,但是提示未找到,那你應該檢查下模板名稱是不是有寫錯。
~~~
>[success] # FBV 數據應用
>[danger]##### blog/views.py
* 調用的包
~~~
from django.shortcuts import render
from django.http import Http404
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
from django.db import connection
from .models import Post, Tag, Categroy
from config.models import SideBar
from comment.models import Comment
# Create your views here.
~~~
* 提取共同數據,博客系統的 側邊欄
~~~
1.categroy = Categroy.objects.filter(status=1) 注最好將1給予實際命名
# 從一個sql 中取出兩種狀態 兩個方式
不推薦進行了兩次sql:
categroy.filter(is_nav=True)
categroy.filter(is_nav=False)
2.推薦:使用下面案例寫法
~~~
~~~
def get_common_context():
# 類別展示
categories = Categroy.objects.filter(status=1)
nav_cates = []
cates = []
for cate in categories:
if cate.is_nav:
nav_cates.append(cate)
else:
cates.reverse(cate)
# 邊欄展示
side_bars = SideBar.objects.filter(status=1)
recently_posts = Post.objects.filter(status=1)[:10]
# host_posts = Post.objects.filter(status=1).order_by('views')[:10]
recently_comments = Comment.objects.filter(status=1)[:10]
context = {
'nav_cates':nav_cates,
"cates":cates,
'side_bars':side_bars,
'recently_comments':recently_comments,
'recently_posts':recently_posts,
}
return context
~~~
* 首頁展示
~~~
def post_list(request, category_id=None, tag_id=None):
current_page = request.GET.get("page", 1)
page_size = 2
# 分頁 異常處理
try:
current_page =int(current_page)
except:
current_page = 1
queryset = Post.objects.all()
if category_id:
queryset = queryset.filter(category_id=category_id)
# 多對多數據處理
elif tag_id:
try:
tag = Tag.objects.get(id=tag_id)
except Tag.DoesNotExist:
queryset = []
else:
queryset = tag.post_set.all()
# 分頁
paginator = Paginator(queryset.order_by('id'), page_size)
try:
posts = paginator.page(current_page)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
context = {
"posts":posts,
}
# 對共同數據處理添加
common_context = get_common_context()
context.update(common_context)
return render(request, 'blog/list.html', context=context)
~~~
* 內容展示
~~~
def post_detail(request, post_id=None):
queryset = Post.objects.all()
if post_id:
try:
queryset = queryset.get(id=post_id)
except Post.DoesNotExist:
raise Http404("不存在")
context = {
"posts": queryset
}
common_context = get_common_context()
context.update(common_context)
return render(request, 'blog/detail.html', context=context)
~~~
>[danger] ##### html
* base.html 模板頁面
~~~
<h1>list</h1>
<ul>
{% for cate in nav_cates %}
<li>
<a href="{% url 'category' cate.id %}">{{ cate.name }}</a>
</li>
{% endfor %}
</ul>
{% block content %}
{% if posts %}
{% for post in posts %}
title: <a href="{% url 'detail' post.id %}">{{ post.title }}</a><br>
desc:{{ post.desc }}
<hr/>
{% endfor %}
{% if posts.has_previous %}<a href="?page={{ posts.number|add:"-1" }}">上一頁</a>{% endif %}
page {{ posts.number }} of {{ posts.paginator.num_pages }}.
{% if posts.has_next %}<a href="?page={{ posts.number|add:"1" }}">下一頁</a>{% endif %}
{% else %}
沒有數據
{% endif %}
<hr/>
{% endblock %}
<ul>
{% for cate in cates %}
<li>
<a href="{% url 'category' cate.id %}">{{ cate.name }}</a>
</li>
{% endfor %}
</ul>
// 側邊展示
<ul>
{% for side in side_bars %}
<h4>{{ side.title }}</h4>
<div>
{% if side.display_type == 1 %}
{{ side.content|safe }}
{% elif side.display_type == 2 %}
<ul>
{% for post in recently_posts %}
<li>{{ post.title }}</li>
{% endfor %}
</ul>
{% elif side.display_type == 4 %}
<ul>
{% for comment in recently_commnent %}
<li>{{ comment.content }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
<div>
{{ side.display_type }}
</div>
{% endfor %}
</ul>
~~~
* 首頁
~~~
{% extends 'blog/base.html' %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
~~~
* 內容頁
~~~
{% extends "blog/base.html" %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% block content %}
<h1>detail</h1>
<a href="/"></a>
{{ posts.content }}
{% endblock %}
</body>
</html>
~~~
- 網絡原理
- 為搭建框架做準備
- 簡單認識網路
- 自定義模擬網站案例
- 優化最終框架
- 數據存儲 -- data
- 用戶個人信息存儲 -- User.txt
- 路由映射 -- routes
- 處理用戶信息 -- routes_static.py
- 保存靜態文件 -- static
- templates -- html 集中處理模塊
- 首頁 -- index.html
- 登陸 -- login.html
- 用戶注冊頁面 -- register
- 日志模塊 -- log.gua.txt
- 啟動文件--server.py
- orm處理 -- model.py
- 日志模塊 -- utils.py
- 兩種數據庫類型
- 傳統數據庫了解篇
- 前端快速入門
- JS簡單使用入門
- css簡單快速入門
- DJANGO
- virtualenv-創建虛擬環境
- 項目結構
- django-admin中文配置
- django-打印sql語句
- django-基礎
- 認識MVC和MTV
- Django--初識
- Django--初識案例
- Django-FBV/CBV
- Django--常用input 交互
- Django-url
- Django-url.py 配置
- Django-include 使用
- Django-url name
- Django-ORM
- ORM-數據庫配置
- ORM-model字段
- ORM-model字段解釋
- ORM-字段選項
- ORM-查詢
- ORM-四種常用查詢方法
- ORM-三種獲取數據
- ORM-其他查詢方式
- ORM-條件查詢雙線
- ORM-Q和F條件使用
- ORM-三種數據庫交互
- 案例 -- 一對多
- ORM-技巧/常見問題
- ORM-N+1 問題
- ORM-并發的處理
- ORM-數量查詢、
- ORM-正向反向查詢
- ORM-基礎案例一
- ORM-基礎一對多案例
- Django-templates
- Django-模板的繼承
- Django-模板的過濾
- Django-自定義模板的過濾
- Django-cookie
- Django-cookies 裝飾器
- Djang-session
- Django-CSRF
- Django-中間件 -- 后續了解
- Django- 緩存 -- 沒有深入了解
- Django-form
- From-ajax
- form-內部驗證處理
- form-屬性
- form-常用的標簽字段
- form-常用的下拉和選擇
- form-widget速查
- Django-ajax序列化
- Django-多種ajax寫法
- ajax-原生寫法
- ajax-$寫法
- ajax-ifram
- Django-ajax圖片上傳
- ajax-原始寫法
- ajax-正常寫法
- iframe+form
- 實戰寫法
- Django-常用自編寫組件
- Django-雙菜單組合搜索
- Django - 多菜單組合搜索
- Django-分頁
- django-綜合基礎
- 綜合基礎-render
- django-admin
- admin-頁面配置
- admin-字段配置
- admin-編輯頁面
- admin-forms驗證
- admin-創建抽象類
- django-驗證碼
- 驗證碼-第三方生成庫
- 驗證碼-view.py使用
- 驗證碼-注意引入Monaco.ttf
- django-用戶注冊
- 注冊-form 模塊
- 注冊-views 模塊
- 注冊-html模塊
- 注冊-model模塊
- django-用戶登錄三種
- session登錄
- form-session 寫法
- view-寫法
- Html-寫法
- model-寫法
- 繼承類登錄
- 外鍵關聯登錄
- django-簡單的student 管理案例
- app-urls.py
- app-models.py配置
- admin-admin.py配置
- app-form.py 和數據庫關聯的寫法
- app-FBV_views.py
- app-CBV_views.py
- templates-index.html
- django-博客系統
- APP目錄-models.py 創建
- APP目錄-基礎展示數據分析
- APP目錄-基礎數據展示cls
- ListView
- DetailView
- FormView
- 額外功能拓建
- 添加文章搜索/用戶文章查詢功能
- 增加一個友情鏈接
- 增加一個評論模塊
- App-利用Bootstrap4 搭建樣式
- 項目crm
- 思維導圖
- perfectCRM-項目名字
- settings.py-配置
- view.py-登陸/登出函數
- crm-app文件
- model.py-表的創建
- admin.py-注冊后臺
- view.py-視圖層
- static-靜態文件
- css
- bootstrap.min.css
- dashboard.css
- ie10-viewport-bug-workaround.css
- signin.css
- fonts
- imgs
- js
- jquery.js
- bootstrap.min.js
- holeder.js
- ie10-viewport-bug-workaround.js
- ie-emulation-modes-warning.js
- plugins
- html模板文件-templates
- crm
- index.html-首頁模板