передача переменных на страницу входа в django - PullRequest
2 голосов
/ 02 марта 2011

Я перезаписал страницу входа администратора django и хотел бы передать некоторые переменные странице входа. Как я могу это сделать?

Ответы [ 5 ]

7 голосов
/ 03 февраля 2012

Одним из решений является использование параметра extra_context (Django 1.3 и новее).

from django.contrib.auth.views import login
...
return login(request, template_name, extra_context={
    'template_variable':value
})

Смотрите эти похожие вопросы и ответы:

И оригинальная функция билета:

2 голосов
/ 13 февраля 2014

Для ясности (я прокомментировал ответ Аксели), другое решение - передать дополнительные переменные шаблона непосредственно из url.conf через клавишу extra_context:

# url.conf -- this example from older django versions refer to docs
from django.contrib.auth.views import login

urlpatterns = patterns('', 
    url(
        r'^accounts/login/$', 
        login, 
        {
            'template_name': 'login.html', 
            'extra_context': {
                # Your extra variables here as key value pairs.
                'title': 'My Page | Log In'
            }
        }, 
        name='login'
    ),
... # other patterns
)
2 голосов
/ 02 марта 2011

Обновление: позвольте мне прояснить, что лично я думаю, что вы должны написать свой собственный вид входа в систему, если вы хотите влиять на контекст, а именно потому, что он очень прост (вы можете скопировать и вставить ~ 20 строк в свой собственный вид).

Так как мне больше всего нравится работать со stackoverflow, найти способ обойти все равно, вот хакерская альтернатива:


Если вы хотите использовать встроенную страницу администратора, единственный способ, который я вижу, это прикрепить свойства к AuthenticationForm.

Вот django.contrib.auth.views.login:

def login(request, template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm):
    ....
    return render_to_response(template_name, {
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
    }, context_instance=RequestContext(request))

Единственное место, где мы можем «заехать» в шаблон входа, не оказывая положительного влияния ни на что другое, - это AuthenticationForm.

from django.contrib.auth.forms import AuthenticationForm

AuthenticationForm.foobar = 'Hello'
...
(r'^accounts/login/$', 'django.contrib.auth.views.login', \
      {'authentication_form':AuthenticationForm),

# template
{{ form.foobar }}

Другой альтернативой является использование контекстного процессора , , который внедряет переменные в каждое представление, которое использует RequestContext. Используйте это, если ваша переменная также используется в других шаблонах.

0 голосов
/ 25 января 2016

вы можете добавить свой пользовательский атрибут к request, который доступен в шаблоне, т.е.

request.my_params = {
    'my_param1':'my_param1',
    'my_param2':'my_param2',
}
0 голосов
/ 14 ноября 2013

Как сказал Аксели, используйте extra_context, но передайте дополнительный контекст как часть контекста:

def login(...):
    ...

    some_var = some_var.objects.all()
    extra_context = {'some_var': some_var,}

    if extra_context is not None:
        context.update(extra_context)

    return TemplateResponse(request, template_name, context, current_app=current_app)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...