【发布时间】:2021-12-06 19:28:37
【问题描述】:
我有一个接收文本的 Django 表单(我从 Google Classroom 复制:一堆学生 cmets)。我用这些cmets来做学生的出勤率。我想要实现的是:
-
通过 GET 用户访问
/insertion/url 接收页面表单作为响应,选择类(class01、class02 等)并粘贴文本 -
当用户在这个表单(post方法)点击提交时,会重定向到相同的
/insertion/url,但是现在表单绑定了提交的数据,并且页面显示了一个预览页面(基于一个布尔变量,我正在通过上下文),根据通知的文本显示学生在场和缺席的情况。在该页面上,一个新的提交按钮将显示在“如果一切正常,请点击确定按钮”之类的文本下方。 -
点击这个ok按钮后,会生成一个pdf,用户会被重定向到
/files/url,查看生成的pdf和之前生成的pdf。
views.py
def insertion(request):
context = {}
if request.method == 'GET':
form = AttendanceDataForm()
context.update({"form": form})
if request.method == 'POST':
form = AttendanceDataForm(request.POST)
context.update({"form": form})
if form.is_valid():
lesson = form.cleaned_data['lesson']
raw_text = form.cleaned_data['raw_text']
# Get course students
course_students = md.Student.objects.filter(course_id=lesson.course_id)
# Get present students based on raw text informed
present_students = [s for s in course_students if s.full_name in raw_text]
# Get absent students based on raw text informed
absent_students = [s for s in course_students if s.full_name not in raw_text]
context.update({
"present_students": present_students,
"absent_students": absent_students,
"render_preview": True
})
context.update({"active_freq": True})
return render(request, 'core/insertion.html', context)
def files(request):
context = {}
if request.method == 'POST':
# How can I access all expensive calculation I did in the previous view?
context.update({"active_gen": True})
return render(request, "core/files.html", context)
插入.html
<div class="row">
<div class="col-12 col-md-6">
<h3>Informar Frequência</h3>
{% crispy form %}
</div>
<div class="col-12 col-md-6">
{% if render_preview %}
<div class="container">
<div class="row p-4 bg-white rounded mt-4">
<div class="col-12 col-sm-6">
<h5>Alunos presentes</h5>
<ul class="previewer-list">
{% for student in present_students %}
<li>{{ student.id }} - {{ student.full_name }}</li>
{% endfor %}
</ul>
</div>
<div class="col-12 col-sm-6">
<h5>Alunos ausentes</h5>
<ul class="previewer-list">
{% for student in absent_students %}
<li>{{ student.id }} - {{ student.full_name }}</li>
{% endfor %}
</ul>
</div>
</div>
<p class="mt-3">If everything's ok, hit the OK button</p>
<form method="post" action="{% url "core:files" %}">
{% csrf_token %}
<button type="submit" class="btn btn-primary">OK</button>
</form>
</div>
{% endif %}
</div>
</div>
我可以实现 1 和 2,但 3 现在是个谜。我无法获得的是如何在files 视图中访问我在insertion 视图中所做的昂贵计算。我该怎么做?
【问题讨论】:
-
您可以使用
FormPreview从django-formtools- docs 实现此目的
标签: python django django-views django-templates frontend