Se eu definir uma variável de sessão no Django, como:
request.session["name"] = "name"
Existe uma maneira de acessá-lo de dentro de um modelo ou preciso recuperá-lo de uma visualização e depois passá-lo para um modelo?
Perguntar porque eu tenho cerca de 10 variáveis de sessão pequenas que eu gostaria de acessar dentro de um modelo, e passar todas as 10 da visualização para o modelo pode ficar um pouco confuso.
(Preciso usar variáveis de sessão porque é um HttpResponseRedirect, mas armazenar as variáveis em um banco de dados é um exagero para meus propósitos.)
Então - alguma maneira de pegar variáveis de sessão diretamente dentro de um modelo?
HttpResponse
classe não lidar com modelos em tudo, então a questão não parece relevante ...request.session
é um dicionário como qualquer outro, então você apenas usa o mecanismo de modelo normal para atributos e membros:Não se esqueça de passar a solicitação para o contexto do modelo ou, melhor ainda, garantir que você esteja usando o RequestContext e tenha o processador de contexto da solicitação ativado. Veja a documentação .
fonte
Estou usando o Django 1.9 (março de 2016) e, para começar
{{ request.session.name}}
a trabalhar, minhas configurações têm o seguinte:A diferença das respostas anteriores é:
'django.core.context_processors.request'
tornou - se'django.template.context_processors.request'
fonte
django.template.context_processors.request
arquivo já estava no arquivo de configuração: DVocê pode passar uma
request
variável para um modelo e usar:fonte
Primeiro imprima
request.session.keys()
entãoVocê receberá essas duas variáveis de sessão.
fonte
a implementação mais simples é usando o loop if:
fonte
Nos seus settins.py
Sua opinião, talvez seja assim.
fonte
Continuando a resposta do @Ludwik Trammer, Como adicionar TEMPLATE_CONTEXT_PROCESSORS
Para o django 1.6, em settings.py, adicione TEMPLATE_CONTEXT_PROCESSORS consultando o código abaixo e use
{{ request.session.name }}
nos arquivos de modelo.Referência https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
Por favor, note que você deve usar esse código completo nas configurações. Usar
"django.core.context_processors.request"
sozinho resultará na substituição das configurações padrão.fonte
Talvez um pouco tarde demais agora. Se você definir diretamente
TEMPLATE_CONTEXT_PROCESSORS
nosettings.py
, você vai perder todo o padrãoTEMPLATE_CONTEXT_PROCESSORS
de valor. Aqui está o que eu faço no meusettings.py
:fonte