передача дополнительных аргументов в логин и шаблон django - PullRequest
2 голосов
/ 24 февраля 2011

Мое приложение использует вид входа в систему Django из django.contrib.auth.views.login с пользовательским шаблоном, который я создал.

Я хотел бы передать моему шаблону дополнительный аргумент, который изменит страницу входа в системунесколькими способами.На самом деле я пытаюсь показать другую страницу входа в систему, основанную на URL.

Как я могу передать дополнительные аргументы представлению входа в систему и моему пользовательскому шаблону?

Ответы [ 4 ]

5 голосов
/ 29 августа 2011

В Django 1.3 вид входа в систему принимает новый аргумент extra_context в виде словаря.

Джанго / вно / авт / 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):
3 голосов
/ 05 июня 2015

Чтобы добавить к Роберто Росарио ответ, вы можете передать словарь аргументов extra_context внутри вашего urls.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 / your-template-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>

Вот Официальная документация Джанго .

2 голосов
/ 25 февраля 2011

Источник показывает, что существует только одно место, которое может повлиять на контекст шаблона.

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 голосов
/ 13 февраля 2015

У меня было много времени на передачу дополнительных переменных контекста из моей пользовательской функции просмотра имени входа в шаблон. Все они печатались как пустая строка, несмотря на то, что следовали советам нескольких людей, намного умнее меня.

Оказывается, моя запись urls.py по-прежнему указывала на встроенный вид входа в систему , а не мой пользовательский.

Пожалуйста, не позволяйте этому случиться с вами.

Когда вы устраняете невозможное, все, что остается, каким бы невероятным оно ни было, должно быть истиной. - Мистер. Спок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...