2014-03-29 34 views
3

我在表單樣式中有兩個問題。Django樣式登錄表單並添加額外跨度

  1. 對於我的登錄,我使用的是Django的默認身份驗證功能,並沒有手動編寫任何視圖或表單。

urls.py

urlpatterns += patterns(
    'django.contrib.auth.views', 

    url(r'^login/$','login', 
    {'template_name':'login.html'}, 
    name='qna_login'), 

    url(r'^logout/$','logout', 
    {'next_page':'qna_home'}, 
    name='qna_logout'), 
    ) 

的login.html

{% extends "base.html" %} 
{% block content%} 
{% if form.errors %} 
<p class="text-warning"> Your username and/or password didn't match </p> 
{% endif%} 
<form role="form" class="form-horizontal" method="post" action="{% url 'django.contrib.auth.views.login' %}"> 
<div class="form-group"> 
{% csrf_token %} 
{{ form }} 
<input type="submit" class="btn btn-primary" value="login" /> 
<input type="hidden" name="next" value="{{ next }}" /> 
</div> 
</form> 
{% endblock %} 

如何引導造型補充呢?

  1. 對於新用戶註冊,我添加了一些引導特定樣式,但需要添加其他跨度並用Glyphicons替換標籤。

forms.py

class UserForm(forms.ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput()) 
    class Meta: 
     model = User 
     fields = ('username', 'email', 'password') 
    def __init__(self, *args, **kwargs): 
     super(UserForm,self).__init__(*args,**kwargs) 
     self.fields['username'].widget.attrs.update({'class':'form-control','placeholder':'Username'}) 
     self.fields['email'].widget.attrs.update({'class':'form-control','placeholder':'Email'}) 
     self.fields['password'].widget.attrs.update({'class':'form-control','placeholder':'Password'}) 

我需要做的就是替換一下在模板生成,如

<p><label for="id_username">Username:</label> <input class="form-control" id="id_username" maxlength="30" name="username" placeholder="Username" type="text" /> <span class="helptext">Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters</span></p> 

通過自定義引導插件和glyphicon,像

<div class="input-group"> 
      <span class="input-group-addon" style="background-color:#b77b48; color:white"><span class="glyphicon glyphicon-user"></span></span> 
      <input type="text" class="form-control" placeholder="Username"> 
     </div> 

回答

16

您可以單獨渲染每個字段而不是le ding Django使用{{ form }}呈現整個表單。你可以寫這樣的模板 -

<form role="form" class="form-horizontal" method="post" action="{% url 'django.contrib.auth.views.login' %}">{% csrf_token %} 
    <div class="form-group"> 
     {% for field in form %} 
      <div class="input-group"> 
       <span class="input-group-addon" style="background-color:#b77b48; color:white"><span class="glyphicon glyphicon-user"></span></span> 
       <input class="form-control" id="{{ field.id_for_label }}" maxlength="30" name="{{ field.html_name }}" value="{{ field.value }}" type="text" /> 
       {{ field.errors }} 
      </div> 
     {% endfor %} 
     <input type="submit" class="btn btn-primary" value="login" /> 
     <input type="hidden" name="next" value="{{ next }}" /> 
    </div> 
</form> 

像往常一樣,和其他事物一樣,Django documentation has everything

+1

謝謝你,這回答我的第二個問題,但這並不適用引導樣式到輸入框本身。我用它來設計表單的其餘部分。如何將CSS類和佔位符添加到{{form.username}}和{{form.password}}等。請注意,我沒有爲我的登錄名定義forms.py或view,因爲它提供了django.contrib.auth。我無法在文檔中找到方法。 – yayu

+0

如果您閱讀文檔,可以進一步修改字段。 django後端唯一需要的是輸入字段名稱。你甚至可以使用靜態表單。 –

+0

已更新的答案示例。 –

相關問題