应用css样式在Django中形成项目

时间:2015-11-17 17:35:50

标签: javascript css django django-templates django-staticfiles

我在forms.py

中有以下表格
from django import forms
class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(label='Password', widget=forms.PasswordInput)

在我的templates / login.html文件中,我有以下内容:

{% load staticfiles %}

<div>
     <form action="" method="post" style="">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="SignIn">
     </form>
</div>

我想使用ui的引导工具,[http://getbootstrap.com/examples/signin/]我将在login.html中加载一些js和css静态文件

当我使用模板标记{{ form.as_p }}获取表单时,如何将css效果应用于我的登录表单?

2 个答案:

答案 0 :(得分:7)

这在基于班级的表格中很容易做到。我的项目示例,其中form-control是一个css类。

from django.forms import ModelForm, TextInput

class ServerForm(ModelForm):

    class Meta:
        model = Server
        fields = ['name', 'ip', 'port']
        widgets = {
            'name': TextInput(attrs={'class': 'form-control'}),
            'ip': TextInput(attrs={'class': "form-control"}),
            'port': TextInput(attrs={'class': 'form-control'}),
            }

然后我看到的模板如下:

{% for field in form %}
    <div class="form-group">
        {{ field.label_tag }} {{ field }}
    </div>
{% endfor %}

生成

<form method="POST">
    <input type="hidden" name="csrfmiddlewaretoken" value="xxxxxx">
    <div class="form-group">
        <label for="id_name">Name:</label>
        <input class="form-control" id="id_name" maxlength="64" name="name" type="text">
    </div>
    <div class="form-group">
        <label for="id_ip">Ip:</label>
        <input class="form-control" id="id_ip" maxlength="20" name="ip" type="text">
    </div>
    <div class="form-group">
        <label for="id_port">Port:</label> <input class="form-control" id="id_port" name="port" type="text">
    </div>
    <div class="form-group">
        <button type="submit" class="save btn btn-default">Add/Edit Server</button>
    </div>
</form>

关键是Meta类的小部件字段。在那里你可以定义你想要使用的django.forms中的哪个小部件,然后可以定义你想要的任何玩家。我们在这里使用&#39; class&#39;并将其参数设置为&#39; form-control&#39;。您可以轻松地替换任意数量的css类,即

'name': TextInput(attrs={'class': 'form-control xs my-other-css-class'}),

我经常在bootstrap中使用它并且它工作正常,只要你在某个地方导入引导程序(来自django-bootstrap插件,或者仅通过基本模板中的静态文件)

答案 1 :(得分:6)

有一个很好的包用于自定义名为django-widget-tweaks的表单小部件的显示。该软件包允许您自定义css类和属性。

您可以单独访问每个项目而不是使用form.as_p,而是使用render_field标记添加css类。

{% load widget_tweaks %}

{% for field in form %}
    {% render_field field class+="css_class_1 css_class_2" %}
{% endfor %}

或者使用包中包含的自定义过滤器来实现紧凑性:

{% load widget_tweaks %}

{% for field in form %}
    {{ field|add_class:"my-css-class" }}
{% endfor %}

或没有循环:

{% load widget_tweaks %}

{% render_field form.name class+="css_class_1 css_class_2" %}
{% render_field form.email class+="css_class_1 other_class" %}
{% render_field form.title class+="css_class_1 css_class_3" %}