django的form如何进行添加样式

发布于 2022-09-04 18:47:03 字数 1701 浏览 14 评论 0

我的form.py内容:

class LogSearchForm(forms.Form):
    platformId = forms.ChoiceField(label='所属平台',choices=platlist)
    gameOuterIp = forms.ChoiceField(label='游戏服',choices=gamelist)
    logid = forms.ChoiceField(label="日志类型",choices=logChoice)
    starttime = forms.DateTimeField(label="开始时间")
    endtime = forms.DateTimeField(label="结束时间")

里面有forms.ChoiceField字段,现在想在html里给这个字段添加样式要如何处理?

以下是我用form功能处理的一些方式

<form class="form-line" method="post" action="/items/search_log/">
{% csrf_token %}

<div class="form-group col-sm-1">
    <label>{{ log_form.platformId.label }}</label>
        {{ log_form.platformId}}
</div>
</form>        

如果不用form功能,自己写的话,如下信息:

<form class="form-inline" method="post" action="/items/search_log/">
 <div class="form-group col-sm-1">
   <label for="exampleInputName2">所属平台</label>
   <select id="id_select" class="form-control selectpicker" data-live-search="true" name="platformId">
       <option value="">平台</option>

       {% for plat in platlists %}
       <option value="{{ plat.plat_id }}">{{ plat.plat_name }}</option>
       {% endfor %}
   </select>
 </div>  
</form>

现在想用form功能,然后要带上样式

class="form-control selectpicker" data-live-search="true"

要怎么处理?

我不想使用类似以下方式

class CommentForm(forms.Form): 
name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'})) 
comment = forms.CharField(widget=forms.TextInput(attrs={'size': '40'}))

这么写,前后端没有分离,我想前端的事前端自己处理,而不是放在服务端处理。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

偏爱自由 2022-09-11 18:47:03

上述方式挺好的,也可以定制每个字段样式。

form的每个字段类型都有默认的widget,一种方式你写一个定制的字段类型,里面的widget的样式先定义好。另一种方式,有一个field.as_widget(widget=None, attrs=None, only_initial=False)方法,可在生成form实例后调教里面field的class,如field.as_widget = fielf.as_widget(attrs={"class":"form-control"}),在template中使用field.as_widget方法渲染。

羁〃客ぐ 2022-09-11 18:47:03

你可以试下django-widget-tweaks 具体使用方法 你可以看下官方手册

南汐寒笙箫 2022-09-11 18:47:03

Django的Forms生成的样式很差劲...即使添加了widget也一样

你可以在View里面把实例化后的forms对象传入Temaplate,然后{{forms.email}}输出HTML

forms.py

email = forms.EmailField(...)

views.py

return render(request, "users/login.html",{"forms":forms})

users/login.html

<div class="input-group input-group-md">
    <span class="input-group-addon" id="sizing-addon1">
        <i class="glyphicon glyphicon-user" aria-hidden="true"></i>
    </span>
    {{ forms.email }}
</div>

这样你就可以把input放到任何一个地方,而不是forms那样连续生成.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文