2013-10-07 90 views
0

我想知道如何更改默認UserRegistrationForm的顯示。 這是我的views.py文件。如何自定義Django的UserRegistration表單?

from django.http import * 
from django.shortcuts import render_to_response 
from django.http import HttpResponseRedirect 
from django.contrib import auth 
from django.core.context_processors import csrf 
from django.contrib.auth.forms import UserCreationForm 
from forms import MyRegistrationForm 


def register_user(request): 
    if request.method == 'POST': 
     form = MyRegistrationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register_success') 
    args = {} 
    args.update(csrf(request)) 

    args['form'] = MyRegistrationForm() 
    return render_to_response('register.html', args) 

def register_success(request): 
    return render_to_response('register_success.html') 

這是在register_user的模板中顯示的內容。

{% extends "application/base.html" %} 

{% block content %} 
    <h2> Register </h2> 
    <form action="/accounts/register/" method="post">{% csrf_token %} 
     {{form}} 
     <input type="submit" value="Register" /> 
    </form> 
{% endblock %} 

我要訪問的每一個申請的{{形式}}獨立,使得它很容易訪問view.how辦呢?

而且這是我的forms.py文件

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm 


class MyRegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'password1', 'password2') 

    def save(self,commit=True): 
     user=super(MyRegistrationForm, self).save(commit=False) 
     user.email=self.cleaned_data['email'] 
     if commit: 
      user.save() 
     return user 

請幫助我,我是新來的Django?

+0

您不能從模板訪問視圖。另外(它可能是一個錯字),但你打印的第一個文件是視圖,而不是網址。該視圖組合了屬性和值的上下文(字典)並呈現模板,並將呈現的信息(通常爲HTML)返回給用戶。你想在模板中做什麼? –

+0

我只想美化我的登記表> – user2823667

+0

如何做到這一點?我想在該表單的字段上應用一些CSS? 與此同時,我不想更改該表單的功能,即表單必須執行與之前相同的功能.... – user2823667

回答

3

你可以做到以下幾點:

  1. 創建appname/templates/registration -folder
  2. 在這個文件夾,把所有你想擁有的HTML模板(如login.html的,password_change_form.html,... )。查看您的django/contrib/admin/templates/registration (or ../admin)-文件夾中的原始表單以瞭解原始模板中所做的操作可能是一個不錯的主意。
  3. 根據您的需求自定義模板。如果你想將ssame css應用到每一個頁面,我會建議編寫你自己的base.html並使用{% extends "base.html" %}來擴展它。
  4. 添加的意見,你的urls.py,eg.g:

    url(r'^accounts/login/$', 'django.contrib.auth.views.login'), 
    url(r'^accounts/logout/$', 'django.contrib.auth.views.logout_then_login'), 
    url(r'^accounts/password_change_done/$', 'django.contrib.auth.views.password_change_done', name="password_change_done"), 
    url(r'^accounts/password_change/$', 'django.contrib.auth.views.password_change', name='password_change'), 
    

沒有必要來定義forms.py或views.py什麼。

+0

謝謝!我認爲它可能工作.... :) – user2823667

1

因此使自己的形式:

Django-x.x/django/contrib/admin/templates副本base.html, base_site.html and login.htmlproject_name/templates/admin

然後,更改文件是必要的。

+0

請您詳細說明一下嗎? 我不知道該怎麼做? 是不是有任何方法來定製這種形式? – user2823667

+0

表單只是一個Django模板。您可以使用JavaScript,CSS和HTML進行自定義。 –

+0

是的,但鋤頭訪問該窗體的字段? 我的意思是在密碼領域中,顯示了一些額外的東西 如何使密碼字段,以顯示我將如何適用於通過形式產生的按鈕有些類默勒效率 和另一種情況的事情? – user2823667