Django:圖片上傳、分頁—Kapitel Zehntens

I眠寿、上傳圖片

在Django中上傳圖片包括兩種方式
1.在管理頁面admin中上傳圖片
2.自定義form表單中上傳圖片,上傳圖片后躬翁,將圖片存儲在服務器上,然后將圖片的路徑存儲在表中盯拱。

Ein.設計上傳
使用模型處理上傳文件:將屬性定義成models.ImageField類型
如果屬性類型為imageField需要安裝Pilow

pip install Pillow

打開 應用/models.py文件盒发,定義模型類PicTest例嘱。

class PicTest(models.Model):
    pic = models.ImageField(upload_to='booktest/')  #upload_to指定圖片保存的路徑

生成遷移,執(zhí)行遷移宁舰,然后在static目錄下創(chuàng)建media目錄拼卵,再創(chuàng)建應用名稱的目錄,此例為booktest蛮艰。

打開 項目/settings.py文件腋腮,設置圖片保存路徑。

因為圖片也屬于靜態(tài)文件壤蚜,所以保存到static目錄下即寡,需在settings.py內(nèi)添加。

MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")

Zwei.在管理頁面admin中上傳圖片
打開 應用/admin.py文件袜刷,注冊PicTest聪富。

from django.contrib import admin
from booktest.models import *

admin.site.register(PicTest)

注冊管理員賬戶

python manage.py createsuperuser

運行服務器,輸入如下網(wǎng)址著蟹。

http://127.0.0.1:8000/admin/

點擊PicTest 內(nèi)的+Add墩蔓,選擇文件,點擊Save萧豆。然后在media/booktest內(nèi)找到照片
Drei.自定義form表單中上傳圖片
(1) 打開 項目/views.py文件奸披,創(chuàng)建視圖pic_upload。

def pic_upload(request):
    return render(request,'booktest/pic_upload.html')

(2) 打開 項目/urls.py文件炕横,配置url源内。

url(r'^pic_upload/$', views.pic_upload),

(3) 在templates/booktest/目錄下創(chuàng)建模板pic_upload.html。

在模板中定義上傳表單份殿,要求如下:
form的屬性enctype="multipart/form-data"
form的method為post
input的類型為file

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% csrf_token %}
    <form action="/pic_handle/" method="post" enctype="multipart/form-data">
        <input type="file" name="pic"><br>
        <input type="submit" value="上傳">
    </form>
</body>
</html>

(4)打開 項目/views.py文件膜钓,創(chuàng)建視圖pic_handle,用于接收表單保存圖片。

from django.conf import settings
from django.http import HttpResponse

def pic_handle(request):
    """
    上傳圖片的處理
    :param request:
    :return:
    """
    pic = request.FILES.get('pic')
    # 返回圖片的名字
    print(pic.name)
    # 把圖片存入到 static文件夾下的media目錄
    # 指定圖片的存儲路徑  static/media/ booktest
    save_path = '{}/booktest/{}'.format(settings.MEDIA_ROOT,pic.name)
    # 文件進行寫入
    with open(save_path, 'wb') as f:
        for content in pic.chunks():
            f.write(content)

    # 在數(shù)據(jù)庫中保存上傳記錄
    PicTest.objects.create(pic= 'booktest/{}'.format(pic.name))
    return HttpResponse('ok')

打開booktest/urls.py文件弊添,配置url敌蜂。

    url(r'^pic_handle/$', views.pic_handle),

運行服務器,在瀏覽器中輸入如下網(wǎng)址:

http://127.0.0.1:8000/pic_upload/
Vier.顯示圖片
打開 應用/views.py文件沃疮,修改視圖pic_handle。

# 將最后幾行的語句改為如下:

   # 在數(shù)據(jù)庫中保存上傳記錄
    pic_Test = PicTest.objects.create(pic= 'booktest/{}'.format(pic.name))
    context = {'pic': pic_Test}
    return render(request, 'booktest/pic_show.html', context)

在templates/booktest/目錄下創(chuàng)建模板pic_show.html梅肤。

<body>
  <img style="width: 300px; width: 200px" src="/static/media/{{ pic.pic}}" alt="圖片加載失敗">
</body

即可在上傳后跳轉(zhuǎn)到pic_show 并展示圖片


II司蔬、分頁

Django提供了數(shù)據(jù)分頁的類,這些類被定義在django/core/paginator.py中姨蝴。 類Paginator用于對列進行一頁n條數(shù)據(jù)的分頁運算俊啼。類Page用于表示第m頁的數(shù)據(jù)。

Ein.Paginator類實例對象
Paginator(列表,int):返回分頁對象左医,參數(shù)為列表數(shù)據(jù)授帕,每面數(shù)據(jù)的條數(shù)
1.屬性
count:返回對象總數(shù)同木。
num_pages:返回頁面總數(shù)。
page_range:返回頁碼列表跛十,從1開始彤路,例如[1, 2, 3, 4]。
2.方法
page(m):返回Page類實例對象芥映,表示第m頁的數(shù)據(jù)洲尊,下標以1開始。

Zwei.Page類實例對象
調(diào)用Paginator對象的page()方法返回Page對象屏轰,不需要手動構(gòu)造颊郎。
1.屬性
object_list:返回當前頁對象的列表。
number:返回當前是第幾頁霎苗,從1開始姆吭。
paginator:當前頁對應的Paginator對象。
2.方法
has_next():如果有下一頁返回True唁盏。
has_previous():如果有上一頁返回True内狸。
len():返回當前頁面對象的個數(shù).

Drei.一個實例
此處我們應用AreaInfo app做展示
首先在模板目錄areatest下創(chuàng)建page_test.html,然后返回views.py編寫視圖函數(shù)

from django.shortcuts import render
from apps.areatest.models import AreaInfo
# 導入分頁包
from django.core.paginator import Paginator

def page_test(request,pIndex):
    # pIndex表示當前頁碼

    # 查詢所有省份地區(qū)的信息
    list1 = AreaInfo.objects.filter(aParent__isnull=True)
    # 將所有地區(qū)的信息按照一頁十條的方式進行顯示
    p = Paginator(list1,10)
    if pIndex == "":
        # 給他展示第一頁
        pIndex = '1'
    # 要把傳過來的pIndex轉(zhuǎn)化成int型
    pIndex = int(pIndex)
    # 獲取第number頁的內(nèi)容
    list2 = p.page(pIndex)
    # 獲取所有頁面信息
    plist = p.page_range
    return render(request,'areatest/page_test.html',{'list':list2,'pIndex':pIndex,'plist':plist})

在areatest/urls.py內(nèi)配置url

from django.conf.urls import url
from apps.areatest import views

urlpatterns = [
    url(r'^/$', views.area, name='area'),
    # 對所有頁碼進行匹配厘擂,并顯示對應頁碼pIndex頁面的內(nèi)容
    url(r'^page(?P<pIndex>[0-9]*)/$', views.page_test),
]

在page_test.html頁面內(nèi)編寫頁面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>顯示當前頁的地區(qū)信息</p><br>
    <ul>
        {% for area in list %}
            <li>
                {{ area.id }}------>{{ area.atitle }}
            </li>
        {% endfor %}
    </ul>
    <p>顯示頁碼信息</p><br>
    {% for pindex in plist %}
        {% if pIndex == pindex %}
            {{ pindex }}
        {% else %}
            <a href="/page{{ pindex }}/">{{ pindex }}</a>
        {% endif %}
    {% endfor %}
</body>
</html>

運行后訪問http://127.0.0.1:8000/page2/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昆淡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刽严,更是在濱河造成了極大的恐慌昂灵,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舞萄,死亡現(xiàn)場離奇詭異眨补,居然都是意外死亡,警方通過查閱死者的電腦和手機倒脓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門撑螺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崎弃,你說我怎么就攤上這事甘晤。” “怎么了饲做?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵线婚,是天一觀的道長。 經(jīng)常有香客問我盆均,道長酌伊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任缀踪,我火速辦了婚禮居砖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驴娃。我一直安慰自己奏候,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布唇敞。 她就那樣靜靜地躺著蔗草,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疆柔。 梳的紋絲不亂的頭發(fā)上咒精,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音旷档,去河邊找鬼模叙。 笑死,一個胖子當著我的面吹牛鞋屈,可吹牛的內(nèi)容都是我干的范咨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼厂庇,長吁一口氣:“原來是場噩夢啊……” “哼渠啊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起权旷,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤替蛉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拄氯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躲查,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年坤邪,在試婚紗的時候發(fā)現(xiàn)自己被綠了熙含。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡艇纺,死狀恐怖怎静,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黔衡,我是刑警寧澤蚓聘,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站盟劫,受9級特大地震影響夜牡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一塘装、第九天 我趴在偏房一處隱蔽的房頂上張望急迂。 院中可真熱鬧,春花似錦蹦肴、人聲如沸僚碎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勺阐。三九已至,卻和暖如春矛双,著一層夾襖步出監(jiān)牢的瞬間渊抽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工议忽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留懒闷,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓徙瓶,卻偏偏與公主長得像毛雇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子侦镇,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 上傳圖片 在python中進行圖片操作灵疮,需要安裝包PIL。 在Django中上傳圖片包括兩種方式: 在管理頁面ad...
    __method__閱讀 217評論 0 2
  • 目錄 分頁 分頁是指在web頁面有大量數(shù)據(jù)需要顯示時壳繁,當一頁的內(nèi)容太多不利于閱讀和不利于數(shù)據(jù)提取的情況下震捣,可以分為...
    南坡三舅閱讀 546評論 0 1
  • 在Django中上傳圖片包括兩種方式 在管理頁面admin中上傳圖片 自定義form表單中上傳圖片,上傳圖片后,...
    IT的咸魚閱讀 2,444評論 0 4
  • Django擴展 一闹炉、驗證碼 1蒿赢、簡介 在常規(guī)的Form表單使用中,驗證碼是常用的組件渣触,用于更好的保障請求的合法性...
    一紙繁鳶w閱讀 162評論 0 0
  • ORM(二) 模型類的屬性 屬性objects:管理器羡棵,是models.Manager類型的對象,用于與數(shù)據(jù)庫進行...
    進擊的豌豆閱讀 315評論 0 0