2015-06-02 26 views
2

使用this question about combining Django allauth signup and login formsthis blog post about the same,我創建了一個聯合註冊/登錄視圖,可以在本地正常工作。但是,當我將相同的代碼放到暫存服務器上時,出現此錯誤:Django allauth聯合註冊/登錄視圖拋出「全球名稱'get_form_class'未定義」

File "./members/views.py", line 209, in get_context_data 
    context['login_form'] = get_form_class(app_settings.FORMS, 'login', self.login_form) 

NameError: global name 'get_form_class' is not defined 

我不知道爲什麼。下面是從views.py應用代碼:

from allauth.account.views import * 
from allauth.account.forms import LoginForm, SignupForm 

class JointSignupLoginView(LoginView): 
    form_class = SignupForm 
    login_form = LoginForm   

    def get_context_data(self, **kwargs): 
     context = super(JointSignupLoginView, self).get_context_data(**kwargs) 
     context['login_form'] = get_form_class(app_settings.FORMS, 'login', self.login_form) 
     return context 

signup = JointSignupLoginView.as_view() 

下面是從urls.py應用代碼:

url(r'^accounts/signup-or-login', JointSignupLoginView.as_view(template_name="account/signup_or_login.html"), name='signup_or_login'), 

下面是從signup_or_login.html應用代碼:

<form id="signup_form example-form" method='post' action="{% url 'account_signup' %}" id="signup"> 
    {% csrf_token %} 
    {{ form|bootstrap }} 
    {% if redirect_field_value %} 
     <input type="hidden" name="{{ redirect_field_name }}" 
        value="{{ redirect_field_value }}"/> 
    {% endif %} 
    <div class="form-actions col-sm-6 col-sm-offset-3"> 
     <button class="btn btn-primary btn-block continue-button" type="submit">{% trans "Sign Up" %}</button> 
    </div> 
</form> 
<form class="login" method='post' action="{% url 'account_login' %}"> 
    {% csrf_token %} 
    {{ login_form|bootstrap }} 
    {% if redirect_field_value %} 
     <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" /> 
    {% endif %} 
    <div class="form-actions col-sm-6 col-sm-offset-3"> 
     <button class="btn btn-primary btn-block continue-button" type="submit">{% trans "Log In" %}</button> 
    </div> 
    <div class="forgot-pass-container"> 
     <a href="{% url 'account_reset_password' %}" id="forgot_pass">Forgot Password?</a> 
    </div> 
</form> 

我意識到JointSignupLoginView不是從SignupView繼承,也許它應該,所以我補充說,但錯誤仍然存​​在。我也嘗試從allauth.account.forms中導入*,但這也不起作用。也許app_settings.FORMS的路徑在分級上不正確(我不知道爲什麼它會在那裏不同)?我怎樣才能擺脫這個錯誤,並讓這個視圖在分期上工作?

回答

2

在長時間盯着Django allauth's code之後,它在我看來就像get_form_class這一行只是獲得了我已經導入的表單!

因此,我只是將context['login_form'] = get_form_class(app_settings.FORMS, 'login', self.login_form)更改爲context['login_form'] = LoginForm,那就做到了!