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

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


相关推荐

  • mysql读写分离之springboot集成

    springboot、mysql实现读写分离1、首先在springcloudconfig中配置读写数据库mysql:datasource:readSize:1#读库个数type:com.alibaba.druid.pool.DruidDataSourcewrite:url:jdbc:mysql://200…

    2022年4月9日
    47
  • Django(71)图片处理器django-imagekit [通俗易懂]

    Django(71)图片处理器django-imagekit [通俗易懂]#介绍ImageKit是用于处理图像的Django应用程序。如果需要从原图上生成一个长宽为50×50的图像,则需要ImageKit。ImageKit附带了一系列图像处理器,用于调整大小和裁剪等常见

    2022年7月30日
    3
  • 网易社招面经,纯干货分享[通俗易懂]

    网易社招面经,纯干货分享[通俗易懂]个人背景本人毕业于二流一本大学非计算机相关专业,大三下学期开始学java。目前刚好工作两年,专业后端,base深圳。面试流程一面二面电话面三面四面视频面主管电话面hr电话面整个流程下来就

    2022年8月1日
    4
  • Servlet再度学习

    Servlet再度学习

    2020年11月12日
    170
  • activiti5.22 springboot 流程引擎 实战全过程

    activiti5.22 springboot 流程引擎 实战全过程一.背景现在很多项目流程上比较复杂,业务上不复杂,对于这种项目,引入流程引擎会比较合适,流程有流程引擎去做管理,让设计更合理,开发更简单。市面上有很多款流程引擎,本人选用了使用率比较广的流程引擎activiti。activiti现在最高版本已经到7,springboot最高版本是6,由于网络上5.22版本资料最多,所以选用了5.22版本作为项目集成。二.activi…

    2022年10月20日
    1
  • 盘点值得互联网创业者学习的十大做事风格

    盘点值得互联网创业者学习的十大做事风格中国互联网通过第19次互联网报告得出很多数据,综合成一句话就是:“发展速度惊人。”面对如此庞大的市场,国外网络巨头虎视眈眈,总想找机会跨进国门,却因为不了解中国互联网运营规范及网民的习惯,或是犹豫不决或是屡遭搁浅。  而与此同时,国内众多网站正在疯狂抢夺这块蛋糕。在这些网站的背后出谋划策的人都是大众较熟悉的,他们的思路以及做事风格,值得现在的互联网创业者学习、借荐,有相似者可对号入座。

    2022年8月20日
    7

发表回复

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

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