2014-04-27 75 views
1

使用django-allauth,我迫使新用戶使用自定義ACCOUNT_SIGNUP_FORM來註冊其他配置文件信息。將上下文值傳遞給django-allauth中的配置文件註冊模板

settings.py 

ACCOUNT_SIGNUP_FORM_CLASS = 'profiles.signup.ProfileSignupForm' 
SOCIALACCOUNT_AUTO_SIGNUP = False 

這ProfileSignupForm然後在改性allauth /模板/ socialaccount/signup.html模板呈現。此修改後的模板呈現新用戶會話中定義的新用戶公司的徽標(我使用的邀請鏈接首先轉到RedirectView,寫入會話,然後轉發到新註冊)。

signup.html 

<html> 
    <body> 
    <img src="{{ logo }}" /> 
    {% crispy form %} 
    </body> 
</html> 

我怎麼能拉從我的會話公司徽標,並把它傳遞給我的模板,而不建立該信息庫和修改註冊查看?

這種做法是這樣的:

class SignupView(RedirectAuthenticatedUserMixin, CloseableSignupMixin, FormView): 

    def dispatch(self, request, *args, **kwargs): 
     ... 
     self.company = request.session.get('company') 
     ... 

    def get_context_data(self, **kwargs): 
     ... 
     context['logo'] = company.logo 
     ... 

回答

1

您可以按照上述方式繼承視圖併爲註冊定義自定義網址以使用您的視圖。

或者

你的車直接訪問公司的標誌在你的模板爲:

{{ request.session.company.logo }} 

這是因爲request來完成,如果與渲染的RequestContext實例可作爲在模板上下文變量。

+0

非常感謝,直接訪問請求正是我所需要的。當你們提到創建自定義網址時,是否將socialauth回調網址設置爲新的SignupView?或者,您的意思是設置SOCIALACCOUNT_AUTO_SIGNUP = True,然後創建一個適配器以重定向到自定義SignupView,如果用戶沒有配置文件存在的話? –

+0

我們不是在談論如何提供任何設置參數,它的簡單..在你的根urls.py文件中你包含這行(r'^ accounts /',include('allauth.urls'))包含所有-auth's urls ..在上面的行之前定義一個單獨的url,其正則表達式與all-auth的註冊url相同url(r「^ signup/$」,MySignupView,name =「account_signup」)。現在非社會註冊將通過這個視圖,你可以添加你想要的任何上下文變量。 –

0

,你可以在你的代碼中直接繼承SignupView除了派生和修改原始SignupView的。

class MySignupView(SignupView): 

    def dispatch(self, request, *args, **kwargs): 
     ... 
     self.company = request.session.get('company') 
     ... 
     return super(MySignupView, self).dispatch(request, *args, *kwargs) 

    def get_context_data(self, **kwargs): 
     context = super(MySignupView, self).get_context_data(**kwargs) 
     context['logo'] = self.company.logo 
     return context 

然後在urls.py中使用MysignupView.as_view()

+0

這是我的印象,SignupView是在socialaccount認證回調之後調用的,並且此url重新路由由allauth模塊(而不是項目的urls.py文件)處理。這就是爲什麼您必須設置ACCOUNT_SIGNUP_FORM_CLASS的值來自定義SignupView實現的表單。有沒有辦法將ACCOUNT_SIGNUP_VIEW_CLASS的假設設置值設置爲自定義SignupView,以便您可以自定義更多的表單? –

相關問題