`
xiaoheliushuiya
  • 浏览: 415849 次
文章分类
社区版块
存档分类
最新评论

django自定义Color Picker控件

 
阅读更多

版权所有,转载请注明出处:http://guangboo.org/2013/03/21/django-color-picker

django提供了丰富的部件,以满足我们对各种html控件的需求。并且如果有特别的要求,我们还可以很容易的编写自己的控件,本文主要内容是自定义一个颜色选择器的控件,该控件是在input的基础上,实现颜色的选择和展示。

如果你不知道如何实现自定义django的form控件的话,可以查看django的源代码,在文件django.forms.widgets.py中,这就是开源的好处,如果我们不知道该怎么入手,可以看看它本身是如何实现的,“依葫芦画瓢”就是了。

因为我们的需求是实现颜色选择器的控件,即ColorPicker,其实这样的控件,google一下,也能搜出一大堆的js库。为了方便我也在网上google到了一个较简单实用的color picker库,jscolor。该库就一个js文件,没有其他的依赖库等,并且为了方便,我们也是直接引用该站点下的jscolor.js文件。

再则,我们的model是使用charfield来表示color字段的,在数据库中也是varchar类型,django默认的form控件是TextInput控件,该控件需要我们手工在输入框中输入颜色的16进制值,如#FF0000表示红色。而我们之所以使用jscolor库,也是因为jscolor是使用的input[type='text']的控件,因此这里我们在自定义django的form部件时,从TextInput继承就可以了。代码如下:

# -*- coding:utf-8 -*-
from django import forms
from django.conf import settings
from django.utils import simplejson

class ColorPicker(forms.TextInput):
	def __init__(self, attrs = None, color_picker_attrs = None):
		if color_picker_attrs:
			cls = attrs.get('class', '')
			json = simplejson.dumps(color_picker_attrs)
			attrs.update({'class':('%s %s' % (cls, json)).strip().replace('"','')})
			
		super(ColorPicker, self).__init__(attrs)
		
	def _media(self):
		js = [settings.COLOR_PICKER_JS_URL]
		return forms.Media(js = js)
	media = property(_media)

代码中的__init__构造函数,与TextInput比起来多了一个color_picker_attrs参数,该参数主要是为jscolor准备的,主要是input控件的class属性值,如:<input class="color {hash:true,caps:false}">,具体可以参考jscolor的文档说明。另外更重要的是_media方法,该方法返回一个forms.Media对象,该对象用来往页面中输出js的引用代码,并且需要添加media= property(_media),来定义media属性。我们这里将js的定制定义在settings.py文件中,命名为COLOR_PICKER_JS_URL,并且值为http://jscolor.com/jscolor/jscolor.js。

那么该控件的使用,就可以参考之前的文章《django如何使ForeignKey字段显示树状结构》中对CategoryAdmin类的定义方式,重写formfield_for_dbfield方法,来修改django默认生成的widget控件。代码如下:

class ColorStyleAdmin(admin.ModelAdmin):
	fields = ('product', 'position', 'color',)
	list_display = ('color', )
	
	def formfield_for_dbfield(self, db_field, **kwargs):
		if db_field.name == 'color':
			return db_field.formfield(widget = ColorPicker(attrs = {'class':'color'}, color_picker_attrs = {'hash':True,'cap':True,'required':not db_field.blank}))
		return super(ProductStyleAdmin, self).formfield_for_dbfield(db_field, **kwargs)

以上代码仅在此演示如何使用ColorPicker部件而用,主要是formfield_for_dbfield的重写方式,这里是将Model的color字段,改变成color picker控件。并传递了hash,cap和required属性。运行效果如下图。

分享到:
评论

相关推荐

    django自定义Color Picker控件- JEFF ZHANG'S1

    在Django框架中,开发自定义控件是为了满足特定需求,比如在本例中,创建一个自定义的Color Picker控件。这个控件允许用户在输入框中选择颜色,而不是手动输入16进制颜色代码。以下是关于这个自定义Color Picker控件...

    django 自定义管理系统

    **Django自定义管理系统详解** Django是一款强大的Python Web开发框架,它遵循“Don't Repeat Yourself”(DRY)原则,旨在简化Web应用程序的构建过程。这个“django 自定义管理系统”项目显然基于Django框架,旨在...

    Django自定义表单引擎Autoforms.zip

    Autoforms是Jeff开源的一个基于Django的自定义表单引擎,可用于调查、投票、信息收集甚至是整合至工作流程引擎和PAAS平台当中。 AutoForms的主要特性: 支持14种字段类型13种html输入控件(包括日期选择组件)...

    web自定义文件上传控件

    在Web开发中,自定义文件上传控件是一个重要的功能,它允许用户选择并上传本地文件到服务器。这个项目,作为作者的第一个作品,旨在提供一种定制化的解决方案,以满足不同的界面需求和交互体验。在此,我们将深入...

    深入理解Django自定义信号(signals)

    django中自定义了一些singals,用于监听一些操作,并发出通知 官方解释: Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到。 简单来说,信号允许特定的sender通知一组receiver...

    django自定义分页插件,bootstrap+python+django分页插件

    django+python自定义分页插件,简单易用,只需要三行代码即可展示自定义分页,支持多个展示效果

    Django后台输入框联想、自定义页面、搜索框等

    在Django框架中,开发一个功能丰富的后台管理系统是常见的需求,包括自定义页面、输入框联想、搜索功能以及权限管理等。本项目旨在提供一种实现这些功能的方法,以提升用户体验和管理效率。以下是对这些知识点的详细...

    Python中Django 后台自定义表单控件

    然而,对应 Model 生成的表单,并不友好,我们希望能像前端开发一样做出各种类型的控件,这就得对其后台的表单进行自定义。 其实 django 已经为我们提供了一些可用的表单控件,比如:多选框、单选按钮等,下面就以...

    django 自定义过滤器的实现

    ### Django 自定义过滤器的实现 #### 一、概述 在使用Django开发Web应用时,我们经常会遇到需要对模版中的数据进行处理的情况。Django自带了一套强大的模板语言——Django Template Language (DTL),它允许开发者...

    Django 自定义权限管理系统详解(通过中间件认证)

    在Django框架中,构建一个自定义权限管理系统是实现复杂应用功能的重要部分,特别是对于需要对用户访问进行精细控制的项目。本篇文章将详细介绍如何通过中间件(Middleware)来实现这一目标。 首先,我们需要创建一...

    在django admin详情表单显示中添加自定义控件的实现

    在Django的admin后台,有时候我们需要对默认的表单进行定制,特别是在详情页面(detail view)中添加自定义的控件,例如按钮、链接或者其他交互元素。本文将介绍如何在Django admin详情表单中实现这样的功能。 首先...

    Django自定义用户表+自定义admin后台中的字段实例

    在Django框架中,自定义用户表和admin后台的字段是一项常见的需求,特别是在需要扩展默认用户模型以存储更多用户信息时。以下是如何实现这一功能的详细步骤和知识点: 1. **自定义用户表** - 在Django中,通常我们...

    Django后台自定义页面、权限设置

    最近工作开发主要利用Django搭建公司后台系统,在开发中遇到数据分页(django原生翻页),后台自定义页面、搜索功能(基于日期单搜索和日期项目名称多选项搜索)、数据显示(BootstrapTable翻页)、权限(控制表)等...

    Django自定义插件实现网站登录验证码功能

    本文将详细介绍如何使用Django自定义插件实现这一功能。验证码是通过生成一张包含随机字符的图片,并要求用户输入图片上显示的文字,以此验证用户是否为真实的人。 首先,我们需要创建一个生成验证码图片的函数。这...

    Django实现的自定义访问日志模块示例

    ### Django 实现自定义访问日志模块详解 在 Web 开发中,日志记录是非常重要的一个环节,它能够帮助开发者追踪应用的行为、诊断问题并优化性能。Django 作为 Python 最流行的 Web 框架之一,虽然内置了一些日志功能...

    Django 自定义404 500等错误页面的实现

    Django提供了两种自定义这些错误页面的方法。 **方法一:创建特定命名的模板文件** 这是最简便的方法,适用于只需基本定制的情况。首先,确保在项目的`templates`文件夹中创建名为`404.html`和`500.html`的模板...

    django 自定义过滤器(filter)处理较为复杂的变量方法

    在Django框架中,自定义过滤器是扩展模板语言功能的重要手段,尤其在处理复杂变量时显得尤为关键。本篇文章将详细讲解如何在Django中创建并使用自定义过滤器来处理字典嵌套以及对象属性的访问。 首先,我们来看一下...

    Django自定义用户登录认证示例代码

    Django 默认使用用户认证的是ModelBackend,这个类也就是我们要下手的地方,ModelBackend里面有一个authenticate的方法,这个方法就是登录时对用户认证的方法。我们要改的就是这个方法。 先看看原码理解一下认证...

    django 自定义filter 判断if var in list的例子

    本文将详细解释如何在Django中创建一个自定义过滤器,以及如何通过一个具体例子来判断某个变量是否存在于列表之中。 首先,了解Django过滤器的基本概念是必要的。Django的模板系统提供了自定义过滤器的功能,允许...

Global site tag (gtag.js) - Google Analytics