Master_Sergius написав:ping написав:питання:
в view.py сформував вибірку об’єктів, які буду почергово виводити в template
але,після повернення з template, вибірка чомусь губиться , збиваються дані .
де зберігати дані між викликами template?
request.sesssion - не хочеться ганяти масив інформації туди, де його ніхто не потребує.
писати в файл і зчитувати? впаде швидкодія.
в Flask є глобальні об’єкти ( g ), але в django їх не бачу
p.s.
коли тестую через runserver - все працює чудово.
пролеми зі збоями при роботі через uwsgi
Покажіть код. А також поясніть що Ви хочете зробити і навіщо. Хоча схоже, що Вам потрібно кешувати результат вибірки, ось https://docs.djangoproject.com/en/1.10/topics/cache/
from django.shortcuts import render, redirect
from django.core.mail import EmailMessage
from datetime import datetime, timedelta
from .models import Quiz, S, CategoryQuestion, UsefulLinks, Question
s = S() # my session
def index(request):
categories = CategoryQuestion.objects.all()
categories.length = len(categories)
for k, v in enumerate(categories):
categories[k].number_questions = len(Question.objects.all().filter(enabled=True).filter(category=v.id))
context = {'categories': categories, }
return render(request, 'quiz/index.html', context)
def quiz(request, *args):
status = args[0]
print('\n status:', status)
if status == 'start':
s.quiz = Quiz()
print('\n s.quiz created. length:', s.quiz.questions.__len__(), ' dict:', s.__dict__.keys(), '\n')
context = {'number_questions': len(s.quiz.questions)}
return render(request, 'quiz/quiz_start.html', context)
elif status == 'next':
print('s.quiz.current_number_question: ', s.quiz.current_number_question, s.__dict__.keys())
if 'quiz' not in s.__dict__.keys():
return redirect('quiz', 'start')
if s.quiz.current_number_question >= 0:
s.quiz.questions[s.quiz.current_number_question].user_answer = set(
int(i) for i in dict(request._get_post()).get('user_answer', [0, ]))
s.quiz.current_number_question += 1
if s.quiz.current_number_question > len(s.quiz.questions) - 1:
return redirect('quiz', 'finish')
else:
current_question = s.quiz.questions[s.quiz.current_number_question]
current_question.list_answers = current_question.get_answers()
current_question.input_type = current_question.get_input_type()
context = {'current_question': current_question,
'current_question_number_in_quiz': s.quiz.current_number_question + 1,
'number_questions': len(s.quiz.questions),
}
return render(request, 'quiz/quiz.html', context)
elif status == 'finish':
if 'quiz' not in s.__dict__.keys():
return redirect('quiz', 'start')
s.quiz.stop_time = datetime.now()
s.quiz.time_delta = s.quiz.stop_time - s.quiz.start_time - timedelta(
seconds=2) # correction for time delay with js-contdown in template
result = s.quiz.result()
result[0] = result[0][:s.quiz.current_number_question]
context = {'result': result,
'questions_answers': [
[r,
a.name,
a.code,
[dict(a.list_answers)[i] for i in a.get_correct_answer()],
a.user_answer,
a.explanation]
for r, a in zip(result[0], s.quiz.questions[:s.quiz.current_number_question])],
'quiz_time': s.quiz.time_delta.__str__().split('.')[0],
}
s.quiz.current_number_question = 0
del s.quiz
return render(request, 'quiz/quiz_finish.html', context)
else:
context = {'info': 'ERROR', }
return render(request, 'quiz/quiz.html', context)
при роботі через uwsgi "гублиться " s.quiz
причому губиться якось непрогнозовано - то відразу, то дозволить полистати пару сторінок