2011-02-24 81 views
2

我的應用程序使用django.contrib.auth.views.login中的Django登錄視圖和我製作的自定義模板。將其他參數傳遞給django的登錄名和模板

我想通過我的模板一個額外的參數,這將在幾個方面改變登錄頁面。實際上,我試圖根據網址顯示不同的登錄頁面。

如何將其他參數傳遞給我的自定義模板的登錄視圖&?

回答

2

來源顯示只有一個地方會影響模板上下文。

def login(request, template_name='registration/login.html', 
      redirect_field_name=REDIRECT_FIELD_NAME, 
      authentication_form=AuthenticationForm): # here 

所以你唯一的選擇就是搭上AuthenticationForm乘車或寫自己的登錄視圖(其中,順便說一句,是簡單,如果你看一下代碼)。

from django.contrib.auth.forms import AuthenticationForm 

AuthenticationForm.my_extra_data = 'foobar' 

(r'^accounts/login/$', 'django.contrib.auth.views.login', \ 
    {'template_name': 'myapp/login.html', \ 
     'authentication_form': AuthenticationForm }), 

模板

{{ form.my_extra_data }} 
+0

謝謝,我結束了用我自己的代碼包裝整個登錄功能。 – bjesus

5

在Django的1.3登錄視圖接受在字典中的形式的新extra_context參數。

Django的/的contrib/auth /中views.py

def login(request, template_name='registration/login.html', 
     redirect_field_name=REDIRECT_FIELD_NAME, 
     authentication_form=AuthenticationForm, 
     current_app=None, extra_context=None): 
+0

很高興知道,謝謝。我將在下次使用。 – bjesus

0

我在路過額外的上下文變量從我的自定義登錄視圖功能的模板時的挫折感。儘管有許多人的建議比我聰明得多,但他們都是以空串的形式打印出來的。

原來我的urls.py條目仍然指向built in login view,而不是我自定義的條目。

請不要讓這發生在你身上。

當你消除不可能時,無論如何,不​​管可能性如何,都必須是真相。 - Mr. Spock

3

爲了增加Roberto Rosario的回答,您可以傳遞的參數的字典裏面extra_contexturls.py

yourProject/urls.py

from django.conf.urls import url 
from django.contrib.auth import views 

urlpatterns = [ 
    url(r'^login/$', views.login, { 
     'template_name': 'your-template-dir/login.html', 
     'extra_context': { 
      'additional_arg1': val1, 
      'additional_arg2': val2, 
      ... 
     }, 
    }, name="login"), 
    ... 
] 

哪樣然後在您的模板中可用。

yourProject /你的模板-DIR/login.html的

{% extends "your-template-dir/base.html" %} 

<div> 
    <p>The value of 'additional_arg1' is {{ additional_arg1 }}.</p> 
    <p>The value of 'additional_arg2' is {{ additional_arg2 }}.</p> 
</div> 

這裏的Django's official documentation