Django 使用模板頁面,塊標籤,模型

1.Django 使用模板頁面

Django對於成體系的頁面提出了模板繼承和模板加載的方式。javascript

1.導入靜態頁面php

2.導入靜態文件(css,js,images)css

3.修改頁面當中的靜態地址html

1.setting中修改配置java

2.templates下建立模板頁面(公有頁面),不一樣的部分轉爲塊標籤python

{% block blockname %}

{% endblock %}

base.html文件以下mysql

<!doctype html>
<html>
<head>
<meta charset="utf8">
<title>{% block title %}木子先生{% endblock %}</title>
<meta name="keywords" content="木子先生" />
<meta name="description" content="木子先生" />
<link href="/static/css/base.css" rel="stylesheet">
<link href="/static/css/main.css" rel="stylesheet">
 {% block style %}
 {% endblock %}
<!--[if lt IE 9]>
<script src="/static/js/modernizr.js"></script>
<![endif]-->
<script type="text/javascript" src="/static/js/jquery.js"></script>
</head>
<body>
<div id="wrapper">
<header>
  <div class="headtop"></div>
  <div class="contenttop">
    <div class="logo f_l">木子先生</div>
    <div class="search f_r">
      <form action="/e/search/index.php" method="post" name="searchform" id="searchform">
        <input name="keyboard" id="keyboard" class="input_text" value="請輸入關鍵字" style="color: rgb(153, 153, 153);" onfocus="if(value=='請輸入關鍵字'){this.style.color='#000';value=''}" onblur="if(value==''){this.style.color='#999';value='請輸入關鍵字'}" type="text">
        <input name="show" value="title" type="hidden">
        <input name="tempid" value="1" type="hidden">
        <input name="tbname" value="news" type="hidden">
        <input name="Submit" class="input_submit" value="搜索" type="submit">
      </form>
    </div>
    <div class="blank"></div>
    <nav>
      <div  class="navigation">
        <ul class="menu">
          <li><a href="/index/">網站首頁</a></li>
          <li><a href="/new/">關於我</a>
            <ul>
              <li><a href="about.html">我的簡介</a></li>
              <li><a href="/listpic/">我的相冊</a></li>
            </ul>
          </li>
          <li><a href="/newList/">個人日記</a>
            <ul>
              <li><a href="/newList/">我的日記</a></li>
              <li><a href="/newList/">學習筆記</a></li>
            </ul>
          </li>
          <li><a href="/newList/">技術文章</a> </li>
          <li><a href="#">給我留言</a> </li>
        </ul>
      </div>
    </nav>
    <SCRIPT type=text/javascript>
	// Navigation Menu
	$(function() {
		$(".menu ul").css({display: "none"}); // Opera Fix
		$(".menu li").hover(function(){
			$(this).find('ul:first').css({visibility: "visible",display: "none"}).slideDown("normal");
		},function(){
			$(this).find('ul:first').css({visibility: "hidden"});
		});
	});
</SCRIPT>
  </div>
</header>
<div class="container">
  <div class="con_content">
    {% block content %}

    {% endblock %}
  </div>
  <div class="blank"></div>
  <!-- container代碼 結束 -->
</div>
  <footer>
    <div class="footer">
      <div class="f_l">
        <p>All Rights Reserved 版權全部:<a href="http://www.yangqq.com">木子先生我的博客</a> </p>
      </div>
      <div class="f_r textr">
        <p>Design by DanceSmile</p>
      </div>
    </div>
  </footer>

</body>
</html>

建立首頁頁面index.html,只用繼承模板,再在塊標籤寫寫本身獨有的內容。jquery

塊內的內容爲默認內容,若是繼承以後,沒有使用塊,塊部分的內容就是默認內容,不然被覆蓋css3

index.html文件以下web

{% extends 'base.html' %}
{% block style %}
<link href="/static/css/index.css" rel="stylesheet">
{% endblock %}
{% block content %}
  <div class="jztop"></div>
  <div class="container">
    <div class="bloglist f_l">
      <h3><a href="/jstt/bj/2017-07-13/784.html">【心路歷程】請不要在設計這條路上徘徊啦</a></h3>
      <figure><img src="/static/images/img_1.jpg" alt="【心路歷程】請不要在設計這條路上徘徊啦"></figure>
      <ul>
        <p> 我整理了一下網友給個人來信,若是你還在躊躇不前,不妨來看看,到底要不要堅持下去!我也歡迎你們給我來信,但願能幫到更多人。</p>
        <a title="【心路歷程】請不要在設計這條路上徘徊啦" href="/jstt/bj/2017-07-13/784.html" target="_blank" class="readmore">閱讀全文>></a>
      </ul>
      <p class="dateview"><span>2017-07-13</span><span>做者:</span><span>我的博客:[<a href="/jstt/bj/">心得筆記</a>]</span></p>
      <h3><a href="/jstt/bj/2015-01-09/740.html">【匆匆那些年】總結我的博客經歷的這四年…</a></h3>
      <figure><img src="/static/images/img_2.jpg" alt="【匆匆那些年】總結我的博客經歷的這四年…"></figure>
      <ul>
        <p>博客從最初的域名購買,到上線已經有四年的時間了,這四年的時間,有笑過,有怨過,有悔過,有執着過,也有放棄過…但最後仍是堅持了下來,時間如此匆匆,等再回過頭已來不及去彌補</p>
        <a title="【匆匆那些年】總結我的博客經歷的這四年…" href="/jstt/bj/2015-01-09/740.html" target="_blank" class="readmore">閱讀全文>></a>
      </ul>
      <p class="dateview"><span>2015-01-09</span><span>做者:楊青</span><span>我的博客:[<a href="/jstt/bj/">心得筆記</a>]</span></p>
      <h3><a href="/jstt/bj/2014-11-06/732.html">分享個人我的博客訪問量如何作到IP從10到600的(圖文)</a></h3>
      <figure><img src="/static/images/img_3.jpg" alt="分享個人我的博客訪問量如何作到IP從10到600的(圖文)"></figure>
      <ul>
        <p>個人我的博客總共展現了三個版本,界面也經歷了由「簡單」到「複雜」再到「簡單」,顏色從「色澤單一」到「五彩斑斕」再到「局部點綴」的過程。原來一年一個版本!而每次改版的契機都是被百度懲罰!界面不要頻繁更換!好好檢查代碼,有沒有冗餘、結構有沒有不合理的地方。</p>
        <a title="分享個人我的博客訪問量如何作到IP從10到600的(圖文)" href="/jstt/bj/2014-11-06/732.html" target="_blank" class="readmore">閱讀全文>></a>
      </ul>
      <p class="dateview"><span>2014-11-06</span><span>做者:楊青</span><span>我的博客:[<a href="/jstt/bj/">心得筆記</a>]</span></p>
      <h3><a href="/jstt/bj/2014-10-18/731.html">帝國cms經常使用標籤調用方法總結(不得不收藏哦)</a></h3>
      <figure><img src="/static/images/img_4.jpg" alt="帝國cms經常使用標籤調用方法總結(不得不收藏哦)"></figure>
      <ul>
        <p>整理了一些經常使用的帝國cms調用,靈動標籤和萬能標籤的調用方法舉例。幻燈片、標題、一級欄目、二級欄目、帶模版的友情連接(下拉菜單)、判斷內容頁字段爲空時是如何調用的等等...新手能夠借鑑學習。</p>
        <a title="帝國cms經常使用標籤調用方法總結(不得不收藏哦)" href="/jstt/bj/2014-10-18/731.html" target="_blank" class="readmore">閱讀全文>></a>
      </ul>
      <p class="dateview"><span>2015-01-09</span><span>做者:楊青</span><span>我的博客:[<a href="/jstt/bj/">心得筆記</a>]</span></p>
      <h3><a href="/jstt/bj/2017-07-13/784.html">【心路歷程】請不要在設計這條路上徘徊啦</a></h3>
      <figure><img src="/static/images/img_1.jpg" alt="【心路歷程】請不要在設計這條路上徘徊啦"></figure>
      <ul>
        <p> 我整理了一下網友給個人來信,若是你還在躊躇不前,不妨來看看,到底要不要堅持下去!我也歡迎你們給我來信,但願能幫到更多人。</p>
        <a title="【心路歷程】請不要在設計這條路上徘徊啦" href="/jstt/bj/2017-07-13/784.html" target="_blank" class="readmore">閱讀全文>></a>
      </ul>
      <p class="dateview"><span>2017-07-13</span><span>做者:</span><span>我的博客:[<a href="/jstt/bj/">心得筆記</a>]</span></p>
      <h3><a href="/jstt/bj/2015-01-09/740.html">【匆匆那些年】總結我的博客經歷的這四年…</a></h3>
      <figure><img src="/static/images/img_2.jpg" alt="【匆匆那些年】總結我的博客經歷的這四年…"></figure>
      <ul>
        <p>博客從最初的域名購買,到上線已經有四年的時間了,這四年的時間,有笑過,有怨過,有悔過,有執着過,也有放棄過…但最後仍是堅持了下來,時間如此匆匆,等再回過頭已來不及去彌補</p>
        <a title="【匆匆那些年】總結我的博客經歷的這四年…" href="/jstt/bj/2015-01-09/740.html" target="_blank" class="readmore">閱讀全文>></a>
      </ul>
      <p class="dateview"><span>2015-01-09</span><span>做者:楊青</span><span>我的博客:[<a href="/jstt/bj/">心得筆記</a>]</span></p>
    </div>
    <div class="r_box f_r">
      <div class="tit01">
        <h3 class="tit">關注{{ username }}</h3>
        <div class="gzwm">
          <ul>
            <li><a class="email" href="#" target="_blank">個人電話</a></li>
            <li><a class="qq" href="#mailto:admin@admin.com" target="_blank">個人郵箱</a></li>
            <li><a class="tel" href="#" target="_blank">個人QQ</a></li>
            <li><a class="prize" href="#">我的獎項</a></li>
          </ul>
        </div>
      </div>
      <!--tit01 end-->

      <div class="tuwen">
        <h3 class="tit">圖文推薦</h3>
        <ul>
          <li><a href="/"><img src="/static/images/01.jpg"><b>住在手機裏的朋友</b></a>
            <p><span class="tulanmu"><a href="/">手機配件</a></span><span class="tutime">2015-02-15</span></p>
          </li>
          <li><a href="/"><img src="/static/images/02.jpg"><b>教你怎樣用欠費手機撥打電話</b></a>
            <p><span class="tulanmu"><a href="/">手機配件</a></span><span class="tutime">2015-02-15</span></p>
          </li>
          <li><a href="/" title="手機的16個驚人小祕密,聽說99.999%的人都不知"><img src="/static/images/03.jpg"><b>手機的16個驚人小祕密,聽說...</b></a>
            <p><span class="tulanmu"><a href="/">手機配件</a></span><span class="tutime">2015-02-15</span></p>
          </li>
          <li><a href="/"><img src="/static/images/06.jpg"><b>住在手機裏的朋友</b></a>
            <p><span class="tulanmu"><a href="/">手機配件</a></span><span class="tutime">2015-02-15</span></p>
          </li>
          <li><a href="/"><img src="/static/images/04.jpg"><b>教你怎樣用欠費手機撥打電話</b></a>
            <p><span class="tulanmu"><a href="/">手機配件</a></span><span class="tutime">2015-02-15</span></p>
          </li>
          <li><a href="/"><img src="/static/images/02.jpg"><b>教你怎樣用欠費手機撥打電話</b></a>
            <p><span class="tulanmu"><a href="/">手機配件</a></span><span class="tutime">2015-02-15</span></p>
          </li>
          <li><a href="/" title="手機的16個驚人小祕密,聽說99.999%的人都不知"><img src="/static/images/03.jpg"><b>手機的16個驚人小祕密,聽說...</b></a>
            <p><span class="tulanmu"><a href="/">手機配件</a></span><span class="tutime">2015-02-15</span></p>
          </li>
        </ul>
      </div>
      <div class="ph">
        <h3 class="tit">點擊排行</h3>
        <ul class="rank">
          <li><a href="/jstt/bj/2017-07-13/784.html" title="【心路歷程】請不要在設計這條路上徘徊啦" target="_blank">【心路歷程】請不要在設計這條路上徘徊啦</a></li>
          <li><a href="/news/s/2016-05-20/751.html" title="IP要突破2000+了" target="_blank">IP要突破2000+了</a></li>
          <li><a href="/jstt/web/2015-07-03/749.html" title="帝國cms首頁、自定義頁面如何實現分頁" target="_blank">帝國cms首頁、自定義頁面如何實現分頁</a></li>
          <li><a href="/jstt/web/2015-02-25/745.html" title="【已評選】給我模板PSD源文件,我給你設計HTML!" target="_blank">【已評選】給我模板PSD源文件,我給你設計HTML!</a></li>
          <li><a href="/jstt/bj/2015-02-14/744.html" title="【鄭重申明】本站只提供靜態模板下載!" target="_blank">【鄭重申明】本站只提供靜態模板下載!</a></li>
          <li><a href="/news/s/2015-01-23/741.html" title="【孕期日記】生活本該如此" target="_blank">【孕期日記】生活本該如此</a></li>
          <li><a href="/jstt/bj/2015-01-09/740.html" title="【匆匆那些年】總結我的博客經歷的這四年…" target="_blank">【匆匆那些年】總結我的博客經歷的這四年…</a></li>
          <li><a href="/jstt/web/2015-01-01/739.html" title=" 2014年度優秀我的博客排名公佈" target="_blank"> 2014年度優秀我的博客排名公佈</a></li>
          <li><a href="/jstt/web/2014-12-18/736.html" title="2014年度優秀我的博客評選活動" target="_blank">2014年度優秀我的博客評選活動</a></li>
          <li><a href="/jstt/css3/2014-12-09/734.html" title="使用CSS3製做文字、圖片倒影" target="_blank">使用CSS3製做文字、圖片倒影</a></li>
          <li><a href="/jstt/css3/2014-11-18/733.html" title="【分享】css3側邊欄導航不一樣方向劃出效果" target="_blank">【分享】css3側邊欄導航不一樣方向劃出效果</a></li>
          <li><a href="/jstt/bj/2014-11-06/732.html" title="分享個人我的博客訪問量如何作到IP從10到600的(圖文)" target="_blank">分享個人我的博客訪問量如何作到IP從10到600的(圖文)</a></li>
        </ul>
      </div>
      <div class="ad"> <img src="/static/images/03.jpg"> </div>
    </div>
  </div>
  <!-- container代碼 結束 -->
  <div class="jzend"></div>
  {% endblock %}

注意靜態文件的地址爲:

css文件地址:"/static/css/文件名"
示例
<link href="/static/css/index.css" rel="stylesheet">
圖片文件地址:"/static/images/文件名"
示例
<img src="/static/images/img_1.jpg" alt="【心路歷程】請不要在設計這條路上徘徊啦">
js文件地址:"/static/js/文件名"
示例
<script type="text/javascript" src="/static/js/jquery.js"></script>

3.使用模板

使用{% extends ‘模板頁’ %} 標籤來繼承模板頁

使用與模板頁同名的塊修改指定部分的內容

在項目當中98%能夠用到模板繼承,還有小部分用到模板加載。

Include是模板加載,使用{% include 「加載頁面」%}將頁面完整的加載到指定頁

Views視圖的代碼優化

 

from django.template.loader import get_template
from django.http import HttpResponse
from django.shortcuts import render_to_response


def newList(request):
    tempalte = get_template("newlist.html")
    result = tempalte.render({})
    return HttpResponse(result)


def index(request):
    return render_to_response("index.html", {"username": "songdan"})


def new(request):
    name = "1234"
    return render_to_response("about.html", locals())


def listpic(request):
    return render_to_response("listpic.html")

 

urls 加入路由 

from django.contrib import admin
from django.urls import path,re_path
from django.views.static import serve
from ArticleBlog_v1_1.views import *
from ArticleBlog_v1_1.settings import MEDIA_ROOT

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', index),
    re_path(r"^$", index),
    path('newList/', newList),
    path('new/', new),
    path('listpic/', listpic),
]

而後就能夠啓動項目,訪問主頁。注意文件編碼的問題和路徑的問題。

2.Django模型

Django 支持鬆耦合開發模式,強烈建議開發者將項目分爲幾個獨立的模塊進行開發,基於這樣的思想,django要求對數據庫操做,必須做用於APP

1.在DjangoProject 下 建立app,命令

python manage.py startapp  appName

目錄結構以下

Migrations 數據庫同步目錄,記錄數據庫同步的記錄

__init__ 包文件

Admin.py django自帶的後臺管理文件

Apps app管理文件,目前無用

Models.py 數據庫建模文件,ORM文件

Tests.py django項目的測試文件

Views.py django 項目的視圖文件

2.數據庫建模

使用類描述數據模型,類爲表名,屬性爲字段

修改models.py 

from django.db import models


# Create your models here.
class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    gender = models.CharField(max_length=16)
    birthday = models.DateField()
    email = models.EmailField()
    address = models.TextField()
    photo = models.ImageField(upload_to="images")

    def __str__(self):# 便於查看
        return self.name


class ArticleType(models.Model):
    label = models.CharField(max_length=32)
    description = models.TextField()

    def __str__(self):
        return self.label

class Article(models.Model):
    title = models.CharField(max_length=32)
    article_author = models.ForeignKey(to=Author, on_delete=models.CASCADE)
    # models.CASCADE 級聯刪除,做者刪除,文章刪除
    # models.SET_NULL 設置空,做者刪除,文章的做者設置爲null
    # models.SET_DEFAULT 設置默認值,做者刪除,文章的做者設置爲默認值,須要配合default參數使用
    desciption = models.TextField()
    content = models.TextField()
    article_type = models.ManyToManyField(to=ArticleType)
    public_time = models.DateField(auto_now=True)
    picture = models.ImageField(upload_to="images")

    def __str__(self):
        return self.title

 

名稱

描述

備註

CharField

字符類型

必須有max_length

IntegerField

整數

 

FloatField

小數

 

DataField

時間(日期)

年月日 auto_now

DataTimeField

時間

年月日時分秒 auto_now

EmailField

郵箱

知足email格式的字符串

TextField

文本

 

ImageField

圖片

一、有upload參數

二、必須安裝pillow模塊

ForeignKeyField

外鍵

一、to 映射對象

二、On_delete

models.CASCADE 級聯刪除,做者刪除,文章刪除
#models.SET_NULL 設置空,做者刪除,文章的做者設置爲null
#models.SET_DEFAULT 設置默認值,做者刪除,文章的做者設置爲默認值,須要配合default參數使用

 

ManyToManyField

多對多

To 映射對象

使用ImageField須要安裝pillow(PIL),Django ORM須要經過pymysql鏈接mysql數據庫,所以要按照pymsql。

 

爲了防止djangopymysql的版本衝突,django默認使用pymysql的老版本MySQLdb來鏈接數據庫。

 在project的__init__.py文件中加入以下代碼,(不要寫在app下的__init__.py

import pymysql
pymysql.install_as_MySQLdb()

3.建立數據庫,修改配置

建立數據庫命令以下

create database articleblog charset="utf8";

配置Settings.py,安裝app

配置mysql

配置語言與時區

媒體文件配置

4.數據庫同步

Python manage.py check # 檢測代碼
Python manage.py makemigrations 
#至關於 在該app下創建 migrations目錄,並記錄下你全部的關於models.py的改動,好比0001_initial.py, 可是這個改動尚未做用到數據庫文件

在此以後執行命令python manage.py migrate,將該改動做用到數據庫文件,好比產生table之類

 python manage.py migrate

同步後,能夠在數據庫中查到增長表 

 

3.Django 後臺管理模型

 Django框架有自帶的後臺管理系統來實現對模型的管理。雖然實際應用中,這個後臺可能並不能知足咱們的需求,可是在學習Django框架時,咱們暫時能夠利用Django自帶的後臺管理系統來管理咱們的模型,同時也能夠了解一個項目的後臺管理系統到底須要哪些功能。

  1. 建立超級管理員帳號。命令python manage.py createsuperuser
    (DjangoPath) E:\DjangoWorkSpace\ArticleBlog_v1_1>python manage.py createsuperuser
    用戶名 (leave blank to use 'administrator'): admin
    電子郵件地址: admin@qq.com
    Password:
    Password (again):
    密碼跟 電子郵件地址 太類似了。
    密碼長度過短。密碼必須包含至少 8 個字符。
    這個密碼太常見了。
    Bypass password validation and create user anyway? [y/N]: y
    Superuser created successfully.
  2. 啓動Web服務器,登陸後臺管理系統。
    python manage.py runserver
    

    訪問http://127.0.0.1:8000/admin,會來到以下圖所示的登陸界面。

  3. 輸入帳號密碼進入後臺,頁面以下

     

  4.  註冊模型類。註冊模型類後,就能夠在後臺管理系統中看到它們。在admin.py加入以下代碼

    更新後的頁面爲

  5.  對模型進行CRUD操做。

  6.  註冊模型管理類。

    在剛纔在後臺查看信息的時候,顯示的信息並不直觀,爲此咱們再修改admin.py文件,經過註冊模型管理類,能夠在後臺管理系統中更好的管理模型。將admin.py的文件修改以下所示

from django.contrib import admin
from Article.models import *
# Register your models here.


class ArticleTypeAdmin(admin.ModelAdmin):
    list_display = ('id', 'label', 'description')
    ordering = ('id', )


class AuthorAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'age','gender','birthday','email','address','photo')
    ordering = ('id',)


class ArticleAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'desciption','content','public_time','picture','article_author_id')
    ordering = ('id',)


admin.site.register(ArticleType,ArticleTypeAdmin)
admin.site.register(Author,AuthorAdmin)
admin.site.register(Article,ArticleAdmin)

  查看做者頁面的信息

相關文章
相關標籤/搜索