我在Ubuntu上使用Django 1.11.9,具有这样的应用程序结构:
VisitorTrackingApp
|
---> admin.py
---> forms.py
---> models.py
---> static
|
---> textboxes.css
---> templates
|
---> index.html
---> signin.html
---> views.py
---> widgets.py
在我的models.py
中,我定义了一个模型Visitors
,其中包含属性Company
(以及其他许多内容):
class Visitors(models.Model):
Company = models.CharField(max_length = 50, blank = True)
在widgets.py
中,我定义了一个自定义小部件,如:
from django import forms
class TextWidget(forms.TextInput):
class Media:
css = {'all': ('textboxes.css',)}
然后我把它放在forms.py
:
from django.forms import ModelForm
from models import Visitor
from widgets import TextWidget
class VisitorsForm(ModelForm):
class Meta:
model = Visitors
fields = ('VisitorType', 'FirstName', 'LastName', 'Company', 'Phone', 'Email')
widgets = {'Company': TextWidget(),}
所有这一切都没有错误地执行。但我基于Django文档here和here的理解是因为我有widgets = {'Company': TextWidget(),}
,那么Company
应根据textboxes.css
中的CSS进行渲染,但是它不是。当我做这样的理智检查时:
t = TextWidget()
print >>sys.stderr, t.media
看看我的Apache日志,我发现我的自定义小部件确实有我的CSS文件的正确路径!
Django widget override template的帖子得到了我的要求,但他似乎正在使用HTML模板来定义他的自定义小部件?不知道这里发生了什么,任何帮助表示赞赏。谢谢!