django模板继承和组件了解

这篇具有很好参考价值的文章主要介绍了django模板继承和组件了解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、模板继承

什么时候需要用到模板呢,比如我们在开发的页面的导航栏,你点不同的功能页面这个导航栏都是一样的,如果每个页面都要加上这个导航条会写重复代码,而且如果导航条有变化,每个页面都要修改,这个是很不方便的,所以我们可以使用模板,把公共的提取出来放到一个模板文件中,其它页面来继承。

比如下面的模板文件为layout.html
比如要引入公共的插件,在模板文件中引入
{% block XXX %}{% endblock%} 这个是占位符,在模板中留有的占位符,在继承的页面就可以重新写的,这个模板留了三处可以实现根模板不同的东西

{% load static %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">
     {% block css %}{% endblock%}
</head>
<body>
<h1>标题</h1>
<div>
    {% block content %}{% endblock%}
</div>
<h1>底部</h1>
<script src="{% static 'js/jquery-3.7.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.js' %}"></script>
 {% block js %}{% endblock%}
</body>
</html>

继承模板department.html 页:

{% extends ‘layout.html’ %} 这个是引入模板

在占位符中间写当前页面特有的东西

<!--引入模板-->
{% extends 'layout.html' %}

{% block css %}
     <link rel="stylesheet" href="{% static 'plugins/XXXXXX.css' %}">
{% endblock %}

{% block content %}
    <h1>部门管理页面</h1>
{% endblock %}

{% block js %}
    <script src="{% static 'js/XXXX.js' %}"></script>
{% endblock %}

2、Django组件

有两种组件

  • Form组件
  • ModelFrom

ModelFrom组件比Form更好用。

组件常用在对数据库的操作,比如从数据库表中读取了很多字段,要在页面展示,如果不用组件,我们在页面要每一个标签去写,这样是很繁琐的,所以django提供了组件,大大减少代码量

Form组件

比如在models.py中定义了UserInfo的表,里面有name 和pwd 和age字段

from django.db import models

# Create your models here.


class UserInfo(models.Model):
    name = models.CharField(verbose_name="姓名",max_length=16)
    pwd = models.CharField(verbose_name="密码", max_length=64)
    age = models.IntegerField(verbose_name="年龄")


class Department(models.Model):
    """部门表"""
    title = models.CharField(verbose_name="标题",max_length=32)

urls.py

from django.urls import path
from app01 import views

urlpatterns = [
    #path('admin/', admin.site.urls),
    path('add/user/', views.add_user),
]

在views.py 中实现添加用户的方法。
需要先定义一个类,并继承forms ,在这个类里面,指定每个字段是什么类型的标签,比如下面代码指定的input 标签,有多少字段这里就写多少个
在user_add 中把这个类的实例化对象传到user_add.html页面。

from django.shortcuts import render,redirect
from django import forms
import models

# Create your views here.

class MyForm(forms):
    name = forms.CharField(widget=forms.TextInput)
    pwd = forms.CharField(widget=forms.TextInput)
    

def user_add(request):
    if request.method == 'GET':
        form = MyForm()
        return render(request,'user_add.html',{"form":form})

user_add.html 中通过for 循环获取form中的值,这样就可以循环创建标签了,不用一个一个去写了

<form method="post">
    {% for field in form %}
        {{ field }}
    {% endfor %}
    
</form>

ModelFrom(操作数据库推荐)

1、models.py 的文件定义数据库跟上面的一样

from django.db import models

# Create your models here.


class UserInfo(models.Model):
    name = models.CharField(verbose_name="姓名",max_length=16)
    pwd = models.CharField(verbose_name="密码", max_length=64)
    age = models.IntegerField(verbose_name="年龄")


class Department(models.Model):
    """部门表"""
    title = models.CharField(verbose_name="标题",max_length=32)

urls.py

from django.urls import path
from app01 import views

urlpatterns = [
    #path('admin/', admin.site.urls),
    path('add/user/', views.add_user),
]

views.py 先定义一个类,继承forms.ModelForm, 在写个内部类Meta ,models.UserInfo通过这个将models中定义数据库的字段拿过来,在fields这个列表中写需要的字段,把这个传给页面

from django.shortcuts import render
from django import forms
import models

# Create your views here.

class UserModelForm(forms.ModelForm):

    class Meta:
        model = models.UserInfo
        fields = ['name','pwd','age']

    def __init__(self, *args,**kwargs):
        super().__init__(*args,**kwargs)

        #循环找到所有的插件,添加了class="form-control"
        for name,field in self.fields.items():
            field.widget.attrs = {"class": "form-control"}

def add_user(request):
    form = UserModelForm()

    return render(request,'user_add.html',{"form":form})

user_add.html 中通过循环来获取form中的数据,并创建标签。field.label是获取到models中的verbose_name这个的值。文章来源地址https://www.toymoban.com/news/detail-618317.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form>
        {{% csrf_token %}}

        {% for field in form %}
             {{ field.label }}:{{ field }}
        {% endfor %}

    </form>

</body>
</html>

到了这里,关于django模板继承和组件了解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Django 之连接 Mysql 数据库详解

    博客:https://blog.csdn.net/qq_34745941/article/details/122549376 若已安装,请忽略。 主要使用的文件如图 若 pip 安装失败,可进入 Python 官方库中下载 whl 文件,操作可参考: 博客:https://blog.csdn.net/qq_34745941/article/details/106341898 在 settings.py 中,配置 Mysql 的连接串 扩展: Django 也支持其

    2024年02月04日
    浏览(42)
  • Django ORM:数据库操作的Python化艺术

    Django的对象关系映射器(ORM)是其核心功能之一,允许开发者使用Python代码来定义、操作和查询数据库。这篇文章将带你深入了解Django ORM的强大之处,从基本概念到高级查询技巧,提供丰富的示例帮助你掌握使用Django ORM进行有效和高效的数据库操作。 Django ORM的目的是提供一

    2024年02月04日
    浏览(49)
  • python#django数据库一对一/一对多/多对多

    搭建 # 一对一 class   TestUser(models.Model):     username=models.CharField(max_length=32)     password = models.CharField(max_length=32) class TestInfo(models.Model):     mick_name=models.CharField(max_length=32)     user=models.OneToOneField(to=TestUser,on_delete=models.CASCADE()#on_delete 删除的模式 CASCADE 级联删除 让后执行数

    2024年02月14日
    浏览(61)
  • python+django+mysql项目实践二(前端及数据库)

    Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 添加模板 在templates下创建 views文件中添加 在setting文件中进行配置 在Terminal输入命令下发指令

    2024年02月14日
    浏览(45)
  • Python 框架学习 Django篇 (八) 代码优化、数据库冗余处理

    我们开发软件系统的时候,需要不断的反思我们代码里面是否有可以优化的地方。而优化的重点之一,就是把冗余的代码优化为可以复用的库。我们在前面编写了一些功能,但是其中存在很多冗余的方法 打开这3个文件我们可以看到他们的入口函数dispatcher  实际的代码相似度

    2024年02月06日
    浏览(33)
  • 二挡起步——pythonweb开发Django框架,前端原生+Django后端框架+python网络抓包(代替数据库数据)(附带小案例)

     大家好,我是csdn的博主: lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主 lqj_本人擅长微信小程序,前端,python,等方面的知识 https://blog.csdn.net/lbcyllqj?spm=1011.2415.3001.5343 哔哩哔哩欢迎关注: 小淼Develop 小淼Develop的个人空间-小淼Develop个

    2024年02月03日
    浏览(53)
  • [Python+Django]Web学生信息管理系统数据库设计及系统实现

    本文我们完成数据的设计,并通过Django框架完成数据库构建同时利用Django框架模式实现学生信息管理系统的功能。 简单的包装下毕设应该没问题了。 Python,Mysql,Pycharm的安装本文就不做特别介绍了,有需要的同学请参考如下博文。 Python + Django4 搭建个人博客(二):准备开

    2024年02月03日
    浏览(50)
  • python在Django中,如何使用MySQL数据库进行分页怎么实现

    在Django中,使用MySQL数据库进行分页是一个相对简单的任务。Django的ORM提供了内置的分页功能,你只需要使用Paginator类即可。以下是一个基本的示例,展示了如何在Django中使用MySQL进行分页: 首先,确保你已经安装了Django和MySQL,并且已经配置了Django项目以使用MySQL数据库。

    2024年04月29日
    浏览(35)
  • python常用库之pymongo库(Python操作Mongodb数据库)| Django项目连接MongoDB方式选型(MongoEngine)

    github:https://github.com/mongodb/mongo-python-driver PyMongo用于与Python与MongoDB数据库进行交互的工具。bson包是Python的BSON格式 的实现。Pymongo包是MongoDB的本地Python驱动程序。gridfs包是gridfs 的pymongo实现。 Pymongo支持MongoDB 3.6、4.0、4.2、4.4、5.0和6.0。 总结:PyMongo 是 MongoDB 与 Django 交互的标准

    2024年02月10日
    浏览(43)
  • Vue+阿里云(继承mongoDB数据库)的增删改查

      目录 说明:  被称为全球领先的阿里云 mangoDB        阿里云与mongoDB 删除数据(批量) 删除之前 后端(阿里云端,云函数:one111)  前端(客户端)vue 删除之后  修改数据(批量) 修改之前  后端(阿里云端,云函数:one111)  前端(客户端)vue 修改之后  增加数据

    2024年02月01日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包