2017-01-20 90 views
0

我得到一個錯誤, NameError at/accounts/regist/ 全局名稱'RegisterForm'未定義。全局名稱'RegisterForm'未定義

我確實定義了'RegisterForm'。 我forms.py

from django import forms 
from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.forms import AuthenticationForm 


class RegisterForm(UserCreationForm): 
    def __init__(self, *args, **kwargs): 
     __init__(*args, **kwargs) 
     self.fields['username'].widget.attrs['class'] = 'form-control' 
     self.fields['password1'].widget.attrs['class'] = 'form-control' 
     self.fields['password2'].widget.attrs['class'] = 'form-control' 


class LoginForm(AuthenticationForm): 
    def __init__(self, *args, **kwargs): 
     __init__(*args, **kwargs) 
     self.fields['username'].widget.attrs['class'] = 'form-control' 
     self.fields['password'].widget.attrs['classF'] = 'form-control' 

在urls.py

from django.conf.urls import url 
from . import views 
from django.contrib.auth.views import login, logout 

urlpatterns = [ 
    url(r'^login/$', login, 
     {'template_name': 'registration/accounts/login.html'}, 
     name='login'), 
    url(r'^logout/$', logout, name='logout'), 
    url(r'^regist/$', views.regist,name='regist'), 
    url(r'^regist_save/$', views.regist_save, name='regist_save'), 
] 

如何解決它寫在views.py

from django.contrib.auth.forms import AuthenticationForm 
from django.contrib.auth.decorators import login_required 
from django.http import HttpResponse 
from django.shortcuts import render, redirect 
from django.views.decorators.http import require_POST 



def index(request): 
    context = { 
     'user': request.user, 
    } 
    return render(request, 'accounts/index.html', context) 


@login_required 
def profile(request): 
    context = { 
     'user': request.user, 
    } 
    return render(request, 'accounts/profile.html', context) 


def regist(request): 
    form = RegisterForm(request.POST or None) 
    context = { 
     'form': form, 
    } 
    return render(request, 'accounts/regist.html', context) 


@require_POST 
def regist_save(request): 
    form = RegisterForm(request.POST) 
    if form.is_valid(): 
     form.save() 
     return redirect('main:index') 

    context = { 
     'form': form, 
    } 
    return render(request, 'accounts/regist.html', context) 

? (我是初學者)

回答

0

你在forms.py中定義了它,但是你並沒有將它導入到views.py中。

另外請注意,您的__init__方法將無法正常工作;這不是你如何調用超類方法。您需要使用super方法:

class RegisterForm(UserCreationForm): 
    def __init__(self, *args, **kwargs): 
     super(RegisterForm, self).__init__(*args, **kwargs) 

以及類似的LoginForm。

+0

THX烏爾comments.by的方式,我應該在哪裏寫烏爾班RegisterForm? 它是forms.py? – lili

0

在views.py添加此 從者,恕不導入RegisterForm