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

函数和方法的区别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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据处理的基本流程是什么?[通俗易懂]

    写在前面本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和文献引用请见100个问题搞定大数据理论体系解答大数据处理流程主要分为3步:1.数据抽取和集成2.数据分析3.数据解释补充1.数据抽取与集成由于大数据处理的数据来源类型丰富,利用多个数据库来接收来自客户端的数据,包括企业内部数据库、互联网数据和物联网数据,所以需要从数据中提取关系和实体,经过关联和聚合等操作,按照统一定义的格式对数据

    2022年4月9日
    80
  • 操作系统:银行家算法(C语言代码)详解

    操作系统:银行家算法(C语言代码)详解银行家算法流程图:银行家算法自然语言描述:设Requesti是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:(1)如果Requesti[j]≤Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Requesti[j]≤Available[j],便转向步骤3;否则,表示尚无足够资源,Pi须等待。(3)系统试探着把资源分配给进程Pi,并修改下面数据..

    2022年6月13日
    30
  • kafka主要用来做什么_kafka概念

    kafka主要用来做什么_kafka概念Kafka最初由LinkedIn公司开发的,并于2010年贡献给了Apache基金会,之后成为Apache顶级项目。目前Kafka已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Storm、Spark、Flink等都支持与Kafka集成。Kafka之所以受到越来越多的青睐,与它所“扮演”的三大角色是分不开的:消息系统:Kafka和传统的消息系统(也称作消息中

    2022年9月25日
    5
  • 前工程师讲解:开关电源设计-LLC电源

    前工程师讲解:开关电源设计-LLC电源很多最初接触电源的朋友,都是从开关电源设计来进行入门学习的。期间不仅要查阅大量的资料,还要对这些资料进行筛选和整理,比较耗费时间和精力。为此,小编将一名前工程师的开关电源设计经验进行了整理,希望能帮助大家加快自学的步伐。      原本在本篇文章当中将为大家讲解关于EMI、尖峰电压处理等方面的知识,但是这些知识的整体思路在开关电源的各类拓扑当中都是互通的,所以转而对主拓扑进行介绍。

    2022年5月22日
    37
  • 40+个精选的VSCode前端插件,总有一款适合你

    40+个精选的VSCode前端插件,总有一款适合你有句话,事半功倍,其必然是借助了某些思想和工具。VSCode是我们前端开发的武器,本文40+精选插件,让其更加锋利,无坚不摧!!必备的下面这些必备的我就不说了代码段JavaScript\…

    2022年7月25日
    21

发表回复

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

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