函数和方法的区别「建议收藏」

函数和方法的区别classFoo(object):def__init__(self):self.name="haiyan"deffunc(self):print(s

大家好,又见面了,我是你们的朋友全栈君。

函数和方法的区别

1、函数要手动传self,方法不用传

2、如果是一个函数,用类名去调用,如果是一个额方法,用对象去调用 
相关示例
函数和方法的区别「建议收藏」
函数和方法的区别「建议收藏」

class Foo(object):
    def __init__(self):
        self.name="haiyan"
    def func(self):
        print(self.name)

obj = Foo()
obj.func()
Foo.func(obj)

View Code

判断函数和方法的方式

函数和方法的区别「建议收藏」
函数和方法的区别「建议收藏」

from types import FunctionType,MethodType
obj = Foo()
print(isinstance(obj.func,FunctionType))  #False
print(isinstance(obj.func,MethodType))   #True   #说明这是一个方法

print(isinstance(Foo.func,FunctionType))  #True   #说明这是一个函数。
print(isinstance(Foo.func,MethodType))  #False

View Code

js和jquery绑定事件的几种方式

函数和方法的区别「建议收藏」

 三、创建表的一个limit_choices_to参数

limit_choices_to:屏蔽某些选项,只显示某些指定的选项。例如下面的,只让显示部门id是1001的

    consultant = models.ForeignKey(verbose_name="课程顾问", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':1001})

 四、include和inclusion_tag的区别

这两个都是处理代码冗余的,由于其他的页面也会有这样的功能,也要用到,我们可以吧它摘出来,在创建个文件夹写进去。导入进来

如果用include,这里面的数据得从后端传,
如果用inclusion_tag,你返回啥就会帮我们传啥,它既有自己的功能,也有include的功能,又可以处理数据

include的使用

复制代码
<body>
<h3>添加页面</h3>
{% include "stark/form.html" %}
{#<form action="">#}
{#    {{ form }}#}
{#</form>#}

#include导入的相当于下面注释的form表单的内容
复制代码

inclusion_tag的使用

1、创建一个templatetags的文件夹,在里面创建一个change_form.py的文件,在里面写代码,需要加上

@register.inclusion_tag这个装饰器
复制代码
#!usr/bin/env python
# -*- coding:utf-8 -*-
from django.template import Library
from django.urls import reverse
from stark.service.v1 import site

register = Library()
@register.inclusion_tag("stark/form.html")
def form(model_form_obj):
    from django.forms import ModelChoiceField
    from django.forms.boundfield import BoundField  # 数据都封装在这个类了
    new_form = []
    for bfield in model_form_obj:
        dic = {"is_popup": False, "item": bfield}  # 每一个bfield就是Form的字段,是一个对象
        if isinstance(bfield.field, ModelChoiceField):
            # print(bfield.field,"popup按钮")
            print(bfield, type(bfield))  # <class 'django.forms.boundfield.BoundField'>
            releated_model_name = bfield.field.queryset.model  # 找到关联的类名
            app_model_name = releated_model_name._meta.app_label, releated_model_name._meta.model_name  # 找到应用名和类名(目的是拼接url)
            base_url = reverse("stark:%s_%s_add" % (app_model_name))
            popup_url = "%s?_popupbackid=%s" % (base_url, bfield.auto_id)  #每一个input框的id
            print(bfield.auto_id,"111111")
            dic["is_popup"] = True
            dic["popup_url"] = popup_url
        new_form.append(dic)
    return {"form":new_form}   #返回的这个form是给了"stark/form.html"它里面的form,然后循环遍历
复制代码

3、使用

{% load change_form %}
<body>
<h3>编辑页面</h3>
{% form form %}
</body>

 4、stark/form.html

函数和方法的区别「建议收藏」
函数和方法的区别「建议收藏」

<form method="post" class="form-horizontal" novalidate>
    {% csrf_token %}
    {% for dic in form %}
        <div class="col-sm-6">
            <div class="form-group">
                <label for="inputEmail3" class="col-sm-2 control-label">{{ dic.item.label }}</label>
                <div class="col-sm-10" style="position: relative">
                    {{ dic.item }}
                    {% if dic.is_popup %}
                        <div style="position: absolute;right: -5px;top: 8px;z-index: 9999">
                            <a onclick="popUp('{{ dic.popup_url }}')" class="glyphicon glyphicon-plus"></a>  <!--注意要加引号,不然就会被当成变量了-->

                        </div>
                        {#                    判断如果是MOdelChoicesField是Fk#}
                        {#                    判断如果是MOdelChoicesField是Fk#}
                    {% endif %}
                    {{ dic.item.errors.0 }}
                </div>
            </div>
        </div>
    {% endfor %}
    <div class="col-sm-offset-11 col-sm-1">
        <input type="submit" class="btn btn-primary" value="提交">
    </div>
</form>
<script>
    function popupCallback(data) {
        var op = document.createElement("option");
        op.value = data.id;
        op.text = data.text;
        op.setAttribute("selected","selected");
        document.getElementById(data.popupbackid).appendChild(op)
    }
    function popUp(url) {
           var popupPage = window.open(url, url, "status=1, height:500, width:600, toolbar=0, resizeable=0");
    }

</script>

View Code

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124486.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows系统C#(.Net)MySql数据库同步工具

    windows系统C#(.Net)MySql数据库同步工具DbSyncDbSync是一款使用.Net4.5(可以转Core)作为基础框架开发的,目前运行在windows平台的数据库同步工具。此类工具开源社区有很多,这里不是为了重复造轮子,仅仅是因为公司业务需要,不建议直接在生产环境上使用。项目介绍DbSync运行在windows平台的数据库同步工具支持一主多从同步支持同步方式设设置(结构,索引,增量,全量)支持指定表同步和忽略表同步支持同步计划,定时同步展示信息获取本人QQ:724926089,代码比较简单,有需要支持的地

    2022年6月17日
    64
  • cache与虚拟存储的异同点_多级cache

    cache与虚拟存储的异同点_多级cache1. cache是指(高速缓冲存储器)。2.计算机系统的三级存储器结构指的是(高速缓冲存储器)、(主存储器)、(辅助存储器)3. 在多级存储体系中,cache的主要功能是(提高存储速度),虚拟存储器的主要功能是(扩大存储容量)。4. 计算机系统对存储器的要求是(容量大)、(速度快)、(成本低)。为了解决这三个方面的矛盾,计算机采用多级存储器体系结构

    2022年9月26日
    2
  • 数据挖掘的方法有哪些?

    数据挖掘的方法有哪些?数据挖掘的方法有哪些?01数据挖掘方法分类介绍1.预测性——有监督学习2.描述性——无监督学习02数据挖掘方法论1.CRISP-DM方法论2.SEMMA方法论03数据挖掘建模框架的3个原则1.以成本-收益分析为单一分析框架2.以分析主体和客体为视角3.构建全模型生命周期工作模板数据挖掘是一个多学科交叉的产物,涉及统计学、数据库、机器学习、人工智能及模式识别等多种学科,如图1-4所示。01数据挖掘方法分类介绍数据挖掘方法按照来源进行分类显得过于庞杂,而且不便于理解和记忆。按照其目

    2022年6月28日
    20
  • stl文件格式特点_常见文件格式

    stl文件格式特点_常见文件格式一、介绍STL文件格式(stereolithography,光固化立体造型术的缩写)是由3DSYSTEMS公司于1988年制定的一个接口协议,是一种为快速原型制造技术服务的三维图形文件格式。S

    2022年8月3日
    9
  • idea汉化插件「建议收藏」

    idea汉化插件「建议收藏」汉化包地址:链接:https://pan.baidu.com/s/1Qkon6fqG-xBE6bUJqyFz6w提取码:fadq该汉化包支持版本:idea2018效果:将界面英文转为中文1.安装好idea之后,找到lib文件目录,将汉化包复制粘贴进去2.复制粘贴完成后重启idea…

    2022年6月10日
    207

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号