Задать вопрос
Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...

Почему не работают куки под Pythom/Django?

Помогите начинающему. Что-то даже не пойму почему не работает:

Вьюшка:
from django.http import HttpResponse
from django.shortcuts import render_to_response

def main_init ( request ) :

    if "NumVisit" in request.COOKIES:
        # стоят куки, и это не первый визит
        NumViz = request.COOKIES["NumVisit"]
        NumViz = int( NumViz ) + 1
    else:
        # куки не стоят
        NumViz = 0

    dimention_to_template = { 'NV': NumViz }      # словарь, для передачи шаблону
    return render_to_response( "index.html" , dimention_to_template ).set_cookie ("NumVizit", str( NumViz )  )


Ну и самый просто шаблон "index.htnl":
<p>{{ NV }}</p>

Не работает. При этом токен-куки Django исправно вешает. А вот мою куку, судя по Request information, не вешает...
  • Вопрос задан
  • 3212 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Sergei_Erjemin
@Sergei_Erjemin Автор вопроса
Улыбайся, будь самураем...
На самом деле работает вот так:

from django.shortcuts import render

def main_init ( request ) :
    NumViz = 0
    if "NumVisit" in request.COOKIES:
        # стоят кукии, и это не первый визит
        NumViz = request.COOKIES["NumVisit"]
        NumViz = int( NumViz ) + 1

    dimention_to_template = { 'NV': NumViz }      # словарь, для передачи шаблону
   
    return render( request, "index.html", dimention_to_template ).set_cookie( "NumVisit", NumViz )

Т.е. через render_to_response куки не вешаются, а вот через просто render -- запросто
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Singularity
Нало же получить обжект респонсе и ему ставить:
def view(request):
  response = HttpResponse( 'blah' )
  response.set_cookie( 'cookie_name', 'cookie_value' )
  return response
Ответ написан
overmes
@overmes
код оформлен просто ужасно
а не работает потому что set_cookie возвращает None
Ответ написан
alternativshik
@alternativshik
Прочитайте уже PEP08! set_cookie вызывается у response, как написали выше...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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