如何使用Django模板语言的JQuery Datepicker

看了这个链接并找到了一些帮助,但我想知道如何为我的models.py中的DateField选择使用JQueryUI Datepicker小部件

models.py


from django.db import models class EModel(models.Model): date = models.DateField(blank=False) 

forms.py


 from django import forms from models import EModel class EForm(forms.ModelForm): class Meta: model = EModel 

form.html – Django如何呈现我的表单。 不在管理页面中

     Form       
{% csrf_token %} {{ form.date }}

我希望有一种方法可以让我的’date’模型字段呈现为JQueryUI Datepicker小部件,但我已经搜索过,发现无法链接这两个(在我的情况下)。








在我的forms.py中

 from django import forms from models import EModel class EForm(forms.ModelForm): class Meta: model = EModel widgets = { 'date' : forms.DateInput(attrs={'type':'date'}) } 

在模型表单中编辑日期窗口小部件属性,为它们提供类“.datepicker”,因为这是JQuery datepicker将要查找的内容。 所以你的ModelForm变成了:

 class EForm(forms.ModelForm): class Meta: model = EModel widgets = {'date': DateInput(attrs={'class': 'datepicker'})} 

文档在这里 。

我使用以下代码,它对我来说很好。 我已经提到了这个项目的所有文件,

models.py

  from django.db import models class EModel(models.Model): date = models.DateField(blank=False) 

forms.py

  from django import forms from testApp.models import EModel class EForm(forms.ModelForm): class Meta: model = EModel widgets = {'date': forms.DateInput(attrs={'class': 'datepicker'})} 

form.html

      Form        
{% csrf_token %}

Date:

views.py

  from django.shortcuts import render from django.http import HttpResponse from django.template import Context from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from django.core.context_processors import csrf from django.template import RequestContext from forms import EForm def datepickerview(request): # Get the context from the request. context = RequestContext(request) # A HTTP POST? if request.method == 'POST': form = EForm(request.POST) # Have we been provided with a valid form? if form.is_valid(): form.save(commit=True) return HttpResponse("Successfully added the date to database"); else: # The supplied form contained errors - just print them to the terminal. print form.errors else: # If the request was not a POST, display the form to enter details. form = EForm() return render_to_response('form.html', {'form': form}, context) 

urls.py

  from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^datepickerview/$', 'testApp.views.datepickerview'), ) 

admin.py

  from django.contrib import admin from testApp.models import EModel admin.site.register(EModel) 

最好的方法是在应用程序的widgets.py文件中创建一个新的小部件:

这是我的颜色选择器的一个例子:

– widgets.py –

 from django import forms from django.conf import settings from django.utils.safestring import mark_safe class ColorPickerWidget(forms.TextInput): class Media: css = { 'all': ( settings.STATIC_URL + 'colorpicker/css/colorpicker.css', ) } js = ( settings.STATIC_URL + 'js/jquery-1.8.3.min.js', settings.STATIC_URL + 'colorpicker/js/colorpicker.js', ) def __init__(self, language=None, attrs=None): self.language = language or settings.LANGUAGE_CODE[:2] super(ColorPickerWidget, self).__init__(attrs=attrs) def render(self, name, value, attrs=None): rendered = super(ColorPickerWidget, self).render(name, value, attrs) return rendered + mark_safe(u'''  ''' % (name, name, name)) 

— views.py —

 from django import forms ColorPickerWidget from myapp.widgets import class EditBackgroundForm(forms.Form): background = forms.CharField(max_length=10, widget= ColorPickerWidget(), required = False, label="Background color") 

此外,您还可以使用小部件创建自定义表单字段,并覆盖其clean()方法。