• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Django教程 —— Django模板

    標簽: Django開發教程  python  django  Django模板

    引言

    如何向請求者返回一個漂亮的頁面呢?

    肯定需要用到 html、css ,如果想要更炫的效果還要加入 js,問題來了,這么一堆字符串全都寫到視圖中,作為 HttpResponse() 的參數嗎?

    先看看如何拼接 html

    # -*- coding:utf-8 -*-
    """
    @Author   :Hui
    @Desc     :{book應用視圖模塊}
    """
    from django.views import View
    from django.http import HttpResponse
    
    
    # /book/index
    def index(request):
        """圖書首頁"""
        if request.method == "GET":
            res_html = "<h1>GET請求 - 圖書信息頁</h1><br/>"
            books = ["射雕英雄傳", "神雕俠侶", "倚天屠龍記"]
    
            res_html += "<ul>"
    
            for book in books:
                res_html += "<li>"
                res_html += book
                res_html += "</li>"
    
            res_html += "</ul>"
    
            return HttpResponse(res_html)
        
    

    這樣定義就太麻煩了吧,并且定義字符串是不會出任何效果和錯誤,如果有一個專門定義前端頁面的地方就好了。

    Django 中,將前端的內容定義在 模板 中,然后再把模板交給視圖調用,各種漂亮、炫酷的效果就出現了。


    運行環境

    • Python 3.9
    • Django 3.1.2

    Django模板

    創建模板

    Django項目下創建 templates 目錄然后在創建 book 目錄,代表這存放著 book 應用的模板文件。

    目錄結構如下圖:

    模板目錄結構


    配置模板

    Django 項目下的 setting.py 文件中找到 TEMPLATES 配置選項,配置如下目錄路徑

    'DIRS': [BASE_DIR / 'templates']
    

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [BASE_DIR / 'templates'],   # 配置模板目錄
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    
    BASE_DIR = Path(__file__).resolve().parent.parent
    

    BASE_DIR 是你 Django 項目的絕對路徑

    可以在終端控制臺輸入如下命令

    python manage.py shell
    

    打開項目的 shell 終端進行調試。

    BASE_DIR


    定義模板

    打開 templtes/book/index.html 文件,定義代碼如下:

    <!DOCTYPE html>
    <html lang="zh-hans">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>圖書信息</title>
    </head>
    <body>
        <h2>{{ title }}</h2>
        <ul>
            {% for book in books %}
                <li>{{ book.title }} --- {{ book.author }}</li>
            {% endfor %}
        </ul>
    </body>
    </html>
    
    

    在模板中輸出變量語法如下,變量可能是從視圖中傳遞過來的,也可能是在模板中定義的。

    {{ 變量名 }}
    

    在模板中編寫代碼段語法如下:

    {% 代碼段 %}
    

    更多模板語法這里就不一一敘述了。


    視圖調用模板

    調用模板分為三步驟:

    • 找到模板
    • 定義上下文
    • 渲染模板
    from django.views import View
    from book.models import BookInfo
    from django.template import loader
    from django.http import HttpResponse
    
    
    # /book/info
    class InfoView(View):
        """圖書信息視圖類"""
    
        def get(self, request):
            # 從數據庫中獲取圖書信息
            books = BookInfo.objects.all()
    
            # 獲取模板
            tmp = loader.get_template('book/index.html')
    
            # 定義上下文
            context = {
                "title": "圖書信息",
                "books": books,
            }
                
            # 渲染模板
            content = tmp.render(context)
    
            return HttpResponse(content)
        
    

    在瀏覽器上訪問 http://127.0.0.1:8000/book/info 效果如下圖

    圖書信息


    視圖調用模板簡寫

    視圖調用模板都要執行以上三部分,于是 Django 提供了一個函數 render 封裝了以上代碼。

    函數 render 包含3個參數:

    • 第一個參數為 request 對象
    • 第二個參數為 模板文件路徑
    • 第三個參數為 字典,表示向模板中傳遞的 上下文數據

    調用 render 的代碼如下:

    from django.views import View
    from book.models import BookInfo
    from django.shortcuts import render
    
    
    # /book/info
    class InfoView(View):
        """圖書信息視圖類"""
    
        def get(self, request):
            # 從數據庫中獲取圖書信息
            books = BookInfo.objects.all()
    
            # 定義上下文
            context = {
                "title": "圖書信息",
                "books": books,
            }
    
            return render(request, "book/index.html", context)
    

    公眾號

    新建文件夾X

    大自然用數百億年創造出我們現實世界,而程序員用幾百年創造出一個完全不同的虛擬世界。我們用鍵盤敲出一磚一瓦,用大腦構建一切。人們把1000視為權威,我們反其道行之,捍衛1024的地位。我們不是鍵盤俠,我們只是平凡世界中不凡的締造者 。

    版權聲明:本文為qq_43629857原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_43629857/article/details/110496021

    智能推薦

    Django教程 —— Django入門

    目標 了解虛擬環境,熟悉Django項目、manage.py的指令、配置文件。 使用Django框架有一個全面的認識,包括開發流程、基本概念要素。 創建自己的第一個Django項目——圖書管理系統(BMSTest)。 準備開發環境 編程語言 版本 Python 3.9.0 這篇博客安裝教程挺詳細的:Python環境安裝教程 第三方庫/框架 版本 說明 Django 3.1....

    Django教程

    為什么80%的碼農都做不了架構師?>>>    一. 安裝。     首先安裝pip     linux下:     yum install python-pip     windo...

    Django基礎-----Django模板系統

    一、視圖函數: 根據路徑定義函數,目的:導入不同功能的HTML頁面。 例:在views.py工作目錄下,定義函數: 其中,teacher.html是需要從django進入并且在瀏覽器顯示的頁面,放置在templates目錄下。 再去urls.py目錄下導入路徑,在導入路徑之前先導入views這個模塊: 然后放置路徑在路徑列表里,運行的時候就可以顯示想要顯示的頁面。格式如下: 其中,teacher/...

    Django 模板語法取值

    1、models.py 2、數據 3、views.py 分析:這里prodline1、prodline2、prodline3數據類型都是QuerySet,但內部數據是不同類型的。 prodline1內部是對象,prodline2內部是字段,prodline3內部是元組。 我們可以通過python manage.py shell 在命令行查看他們內部數據結構類型和數據結構 prodline1 獲取到...

    Django Template(模板系統)

     一、Django模板  內置模板標簽和過濾器  二、常用操作  兩種特殊符號: {{  }}  和 {%  %}  變量相關的用: {{  }}  邏輯相關的用: {%  %}   2.1 變量  在Django的模板語言中按此語法使用:{{ 變量...

    猜你喜歡

    Django 的模板繼承

    1 和前面一樣,創建工程 2 配置 views.py 文件, urls.py 文件 3 新建templates 文件夾, 在里面新建兩個文件, index.html, home.html 4 在settings.py 文件添加路徑, 運行程序,如圖所示 因為是模板繼承,所以這里以bootstrap 框架為例,首先去官網 下載,我們只是簡單的頁面,所以只下載簡易版 5 新建一個staticfiles...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡