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

函数和方法的区别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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?

    Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?面试题dubbo负载均衡策略和集群容错策略都有哪些?动态代理策略呢?面试官心理分析继续深问吧,这些都是用dubbo必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用dubbo的时候,如何负载均衡,如何高可用,如何动态代理。说白了,就是看你对dubbo熟悉不熟悉:dubbo工作原理:服务注册、注册中心、消费者、代理通信、负载均衡; 网络通…

  • 机器学习总结(一):线性回归、岭回归、Lasso回归

    机器学习总结(一):线性回归、岭回归、Lasso回归线性回归作为一种回归分析技术,其分析的因变量属于连续型变量,如果因变量转变为离散型变量,将转换为分类问题。回归分析属于有监督学习问题,本博客将重点回顾标准线性回归知识点,并就线性回归中可能出现的问题进行简单探讨,引出线性回归的两个变种岭回归以及Lasso回归,最后通过sklearn库模拟整个回归过程。目录结构线性回归的一般形式线性回归中可能遇到的问题过拟合问题及其解决方法线性回归代码实现

  • javascript 正则表达式测试工具

    javascript 正则表达式测试工具

  • PotPlayer 无损截取视频片段

    PotPlayer 无损截取视频片段PotPlayer无损截取视频片段

  • 解决哈希冲突(四种方法)[通俗易懂]

    解决哈希冲突(四种方法)[通俗易懂]一、了解哈希表及哈希冲突哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(key-value)之间存在一个映射关系,是键值对的关系,一个键对应一个值。哈希冲突:当两个不同的数经过哈希函数计算后得到了同一个结果,即他们会被映射到哈希表的同一个位置时,即称为发生了哈希冲突。简单来说就是哈希函数算出来的地址被别的元素占用了。二、解决哈希冲突办法1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。举例:就是当我们去教室上课..

  • 线程间通信的几种方法_c语言线程函数

    线程间通信的几种方法_c语言线程函数线程间如何通信/同步?此前小编给大家介绍了进程间通信的方法,于是一些伙伴又好奇线程间的通信及同步方法,没关系,下面小编就继续给大家科普下线程间通信及同步的方法。线程间通信及同步方法介绍:一、线程间的通信方式1、使用全局变量主要由于多个线程可能更改全局变量,因此全局变量最好声明为volatile。2、使用消息实现通信在Windows程序设计中,每一个线程都可以拥有自己的消息队列(UI线程默认自带消息…

发表回复

您的电子邮箱地址不会被公开。

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