我对Django很陌生。遵循一些教程,我已经成功地使用Python通用视图(通用视图)创建了一个表单
我有一个“问题”模型
class Question(models.Model):
title = models.CharField(max_length=200)
body = models.TextField(max_length=2000)
category = models.CharField(max_length=50)
votes = models.IntegerField(default=0)
asked_date = models.DateTimeField(default=datetime.now)
使用这个模型,我创建了一个视图类
class QuestionCreate(CreateView):
model = Question
fields = ['title', 'body', 'category']
这会生成一个漂亮的HTML表单。但是如何将CSS属性传递给每个字段呢?
5条答案
按热度按时间nle07wnf1#
您可以为Question编写一个模型表单,并将其传递给create视图,
或者你可以重写init方法来为每个字段指定一个特定的类,
然后,将其传递给
CreateView
的属性form_class
,acruukt92#
我在基于Bootstrap框架的Django应用程序中遇到了类似的问题。我的第一次尝试:
看起来如下:
确实不太好!第二次尝试意味着为我的视图定义一个自定义的 ModelForm,并应用其中的所有自定义:
请注意
__init__
中的 for 循环,它将 form-control CSS类添加到所有可见的表单字段中。form-control 的CSS样式由Bootstrap提供,所以我甚至不需要修改样式表。一旦我有了我的自定义 ModelForm,我就可以重写我的View类,如下所示:
你可以看到下面的结果。
好得多!
希望这能有所帮助,如果有问题,请随时发表评论。
nnt7mjpx3#
你不能直接将
css
添加到CreateView
,因为你需要创建一个ModelForm
并在你的创建视图中使用form_class = FooForm
,在这个ModelForm
中,你可以为字段使用特定的类,并根据需要使用css来样式化它们。nnsrf1az4#
最好的方法是覆盖
get_form
函数。或者,如果你想将属性添加到所有字段中,你可以使用for循环,如下所示:
wj8zmpe15#
如果我们想对呈现的表单进行一些bootstrap样式化,我们可以使用django-crispy-forms:
然后将“crispy-forms”添加到已安装的应用程序中。
在表单模板页面中加载crispy_form_tags,并使用{{form}}代替{{form|脆的。
Crispy的文档。