Django, как создавать переменные сеанса для передачи информации с одной веб-страницы на другую [duplicate]

  1. Установите базовую точку (наиболее выпуклую точку). Это будет ваша точка поворота треугольников.
  2. Рассчитайте самую левую точку (произвольную), отличную от вашей базовой точки.
  3. Рассчитайте вторую позицию слева направо
  4. Сохраните эту триангулированную область.
  5. Сдвиньте одну точку вправо на каждую итерацию.
  6. Суммируйте триангулированные области
107
задан AP257 31 March 2010 в 11:03
поделиться

9 ответов

Вам нужно добавить django.core.context_processors.request в контекстные процессоры шаблонов . Затем вы можете получить к ним доступ следующим образом:

{{ request.session.name }}

Если вы используете пользовательские представления, убедитесь, что вы передаете экземпляр RequestContext. Пример, взятый из документации :

from django.shortcuts import render_to_response
from django.template import RequestContext

def some_view(request):
    # ...
    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))

Обновление 2013: судя по upvotes, я все еще получаю за этот ответ, люди все еще считают это полезным, более трех лет спустя он был изначально написан. Обратите внимание, однако, что хотя приведенный выше код обзора по-прежнему действителен, в настоящее время существует гораздо более простой способ сделать это. render() - это функция, очень похожая на render_to_response(), но она автоматически использует RequestContext, без необходимости передавать ее явно:

from django.shortcuts import render

def some_view(request):
    # ...
    return render(request, 'my_template.html', my_data_dictionary)
189
ответ дан Ludwik Trammer 18 August 2018 в 08:04
поделиться
  • 1
    См. stackoverflow.com/questions/2246725/… о том, как добавить django.core.context_processors.request в ваши шаблонные контекстные процессоры без переопределения значений по умолчанию. – Rick Westera 28 December 2012 в 07:09
  • 2
    если я использую HttpResponse вместо рендеринга, я все равно смогу получить атрибут сеанса в своем шаблоне. Я смущен, пожалуйста, скажите мне – cafebabe1991 12 July 2014 в 19:33
  • 3
    @ cafebabe1991 Что ты имеешь в виду? Класс HttpResponse вообще не касается шаблонов, поэтому вопрос не кажется релевантным ... – Ludwik Trammer 13 July 2014 в 13:36
  • 4
    Я, на самом деле, я сделал эксперимент, чтобы понять, что в конце. Прости – cafebabe1991 13 July 2014 в 13:38

request.session - это словарь, как любой другой, поэтому вы просто используете обычный механизм шаблона для атрибутов и членов:

{{ request.session.name }}

Не забудьте передать запрос в контекст шаблона или еще лучше убедитесь, что вы используете RequestContext и включили процессор контекстного запроса. См. документацию .

15
ответ дан chiseledCoder 18 August 2018 в 08:04
поделиться

простейшая реализация использует if loop:

{% if 'data' in request.session %}
1
ответ дан cryptoKTM 18 August 2018 в 08:04
поделиться

Я использую Django 1.9 (март 2016 г.) и чтобы {{ request.session.name}} работал, мои настройки имеют это ::

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

. Отличие от предыдущих ответов: 'django.core.context_processors.request' стало 'django.template.context_processors.request'

8
ответ дан lunamystry 18 August 2018 в 08:04
поделиться
  • 1
    в Django 1.10 django.template.context_processors.request уже находился в файле настроек: D – Thai Tran 24 September 2016 в 23:49

Сначала напечатайте request.session.keys(), затем

request.session['_auth_user_id']
request.session['_auth_user_backend']

Вы получите эти две переменные сеанса.

2
ответ дан NewUser 18 August 2018 в 08:04
поделиться

В вашем файле settingsins.py

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request',
)

Ваше представление может выглядеть так.

from django.shortcuts import render_to_response, render
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext

@login_required()
def index_admin(request):
    return render_to_response('carteras/index_admin.html', {}, context_instance=RequestContext(request))
1
ответ дан pjl 18 August 2018 в 08:04
поделиться
  • 1
    Мне также пришлось добавить 'django.contrib.auth.context_processors.auth' в кортеж TEMPLATE_CONTEXT_PROCESSORS. – Tony 16 January 2014 в 18:53

Может быть, уже слишком поздно. Если вы прямо установили TEMPLATE_CONTEXT_PROCESSORS в settings.py, вы потеряете все значения по умолчанию TEMPLATE_CONTEXT_PROCESSORS. Вот что я делаю в своем settings.py:

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as DEFAULT_TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_TEMPLATE_CONTEXT_PROCESSORS + (
    'django.core.context_processors.request',
)
0
ответ дан rabbit.aaron 18 August 2018 в 08:04
поделиться

Вы можете передать переменную request в шаблон и использовать:

{{ request.session.name }}
6
ответ дан Scott Stafford 18 August 2018 в 08:04
поделиться

Продолжение @Ludwik Trammer answer, Как добавить TEMPLATE_CONTEXT_PROCESSORS

Для django 1.6 в settings.py добавьте TEMPLATE_CONTEXT_PROCESSORS, ссылаясь на приведенный ниже код, а затем используйте {{ request.session.name }} в файлах шаблонов.

TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request")

Ссылка https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS

Pls обратите внимание, что вы должны использовать этот полный код в настройках. Использование только "django.core.context_processors.request" приведет к переопределению настроек по умолчанию.

1
ответ дан Sree 18 August 2018 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: