У меня есть приложение, в котором я тестирую принтер и прохожу серию тестовых шагов. Тестовые шаги, я использую пагинацию 1 шаг за раз. Поэтому вы нажимаете «Далее», чтобы перейти к следующему шагу. Проблема в том, что я не создал подробный вид. У меня просто есть представление под названием шаг теста, по которому я могу щелкнуть рядом, чтобы просмотреть весь набор запросов. Проблема в том, что я не могу щелкнуть, чтобы перейти к одному конкретному тесту, или приостановить тест, не возвращаясь к первому шагу. Я попытался создать подробный вид и разделить вид вверх. Но я не мог понять, как сделать каждый шаг детализированным представлением с нумерацией страниц.
Это подробный вид теста и страница. отсюда я нажимаю на запуск теста, который приводит меня к разбивке на страницы в представлении ниже.
def test_detail(request, id):
test_instance = get_object_or_404(Test, id=id)
steps = test_instance.teststep_set.all()
printer_status_check = printer_check(test_instance)
status = printer_status_check['status']
context = {
"test": test_instance,
"steps": steps,
'printer_status': status
}
return render(request, "testing/test_detail.html", context)
Так что это представление, которое контролирует все функции на всех этапах. Мне приходится использовать HTML-формы, потому что я не мог понять, как еще передать форму на следующий шаг. Также мне приходится использовать разные формы на разных шагах, потому что я бью разные конечные точки, используя Ajax или вообще не использую конечные точки.
Итак, проблема со страницы подробностей теста, я вижу все шаги с результатами. Но я не могу щелкнуть по шагу и перейти к этому конкретному шагу в разбивке на страницы.
Так что у меня нет детализации шага. Когда я попытался, я не мог понять, как нажать кнопку «Далее», и это вызвало следующий подробный вид для шага.
def test_step(request, id):
test_instance = get_object_or_404(Test, id=id)
steps = test_instance.teststep_set.all().order_by('id')
paginator = Paginator(steps, 1)
page_request_var = 'page'
page = request.GET.get(page_request_var)
try:
paginated_queryset = paginator.page(page)
except PageNotAnInteger:
paginated_queryset = paginator.page(1)
except EmptyPage:
paginated_queryset = paginator.page(paginator.num_pages)
if request.is_ajax():
step = paginated_queryset[0]
if step.action == 'PrintRequest':
response = print_card(test_instance)
print(response)
ExtraResponseData = response['ExtraResponseData']
JobID = response['JobID']
StatusMessage = response['StatusMessage']
success = response['Success']
JobComplete = response["JobComplete"]
Message = response["Message"]
PrintStatus = response["PrintStatus"]
step_notes = request.POST.get("step_notes")
#-----------------------------
update_step = TestStep.objects.get(id=step.id)
data = {
"ExtraResponseData": ExtraResponseData,
"JobID": JobID,
"StatusMessage": StatusMessage,
"success": success,
"JobComplete": JobComplete,
"Message": Message,
"PrintStatus": PrintStatus
}
update_step.value = Message
update_step.response_body = data
update_step.notes = step_notes
pass_or_fail = evaluate(Message, step)
update_step.passed = pass_or_fail
update_step.save()
return JsonResponse(data)
else:
response = printer_check(test_instance)
status = response['status']
code = response['code']
body = response['body']
step_notes = request.POST.get("step_notes")
#-----------------------------
update_step = TestStep.objects.get(id=step.id)
update_step.value = status
update_step.response_code = code
update_step.response_body = body
update_step.notes = step_notes
pass_or_fail = evaluate(status, step)
update_step.passed = pass_or_fail
update_step.save()
data = {
"status": status,
"code": code,
}
return JsonResponse(data)
else:
status = None
code = None
body = None
success = None
if request.method == 'POST':
step = paginated_queryset[0]
update_step = TestStep.objects.get(id=step.id)
step_notes = request.POST.get("step_notes")
update_step.notes = step_notes
if request.POST.get("NO"):
update_step.value = "No"
update_step.passed = False
elif request.POST.get("YES"):
update_step.value = "Yes"
update_step.passed = True
else:
update_step.value = "OK"
update_step.passed = True
update_step.save()
#-----------------------------
context = {
"test": test_instance,
"steps": steps,
"qs": paginated_queryset,
"page_request_var": page_request_var,
"status": status,
"code": code,
"body": body,
"success": success
}
return render(request, "testing/test_steps.html", context)
Так в шаблоне шагов. Я нажимаю здесь, и это поднимает следующий шаг. Ну, я хочу, чтобы этот шаг был подробным представлением или каким-то другим способом добраться до этого шага.
<section class="section-padding">
<div class="container-fluid">
{% for step in qs %}
{% if step.test_step_name == 'Attempt Print' %}
<a class="pull-right btn btn-primary" href="{{ test.get_absolute_url }}">Finish Test</a>
{% else %}
<a class="pull-right btn btn-default" href="{{ test.get_absolute_url }}">Pause Test</a>
{% endif %}
{% endfor %}
{% for step in qs %}
<div class="step-container">
<div class="step-description">
<h1>{{ step.test_step_name }}</h1>
<p>{{ step.description }}</p>
</div>
{% if step.user_defined == False %}
<form id="{% if step.ajax == True %}step_form{% endif %}" action="" method="POST">
{% csrf_token %}
<input type="submit" value="OK" class="btn btn-primary">
<textarea name="step_notes"rows="4" cols="70" class="step_notes mt-5 form-control" placeholder="Take notes to associate with this test step..."></textarea>
</form>
{% else %}
<form id="{% if step.ajax == True %}step_form{% endif %}" action="" method="POST">
{% csrf_token %}
<input type="submit" value="No" name="NO" class="btn btn-warning">
<input type="submit" value="Yes" class="btn btn-success" name="YES">
<textarea name="step_notes"rows="4" cols="70" class="step_notes mt-5 form-control" placeholder="Take notes to associate with this test step..."></textarea>
</form>
{% endif %}
</div>
{% endfor %}
<div class="ajaxProgress">
<img src="{% static 'img/30.gif' %}">
</div>
</div>
<nav aria-label="Page navigation example">
<ul class="pagination pagination-template d-flex justify-content-center">
{% comment %} {% if qs.has_previous %}
<li class="page-item">
<a href="?{{ page_request_var }}={{ qs.previous_page_number }}" class="page-link">
<i class="fa fa-angle-left"></i>
</a>
</li>
{% endif %} {% endcomment %}
<li class="page-item">
<a href="?{{ page_request_var }}={{ qs.number }}" class="page-link active">
{{ qs.number }}
</a>
</li>
{% if qs.has_next %}
<li class="page-item">
<a href="?{{ page_request_var }}={{ qs.next_page_number }}" class="page-link">
Next <i class="fa fa-angle-right"></i>
</a>
</li>
{% endif %}
</ul>
</nav>
<div class="log-container">
{% for step in steps %}
{% if step.value is not None %}
{% if step.passed is True %}
<h6 class="step_pass_value"><strong>{{ forloop.counter }}</strong>.<em> {{ step.value }}</em><i class="fas fa-check"></i></h6>
{% else %}
<h6 class="step_fail_value"><strong>{{ forloop.counter }}</strong>.<em> {{ step.value }}</em><i class="fas fa-times"></i></h6>
{% endif %}
{% endif %}
{% endfor %}
{% if status is not None %}
<div>
<h6><strong>{{ status }}</strong><h6>
</div>
{% elif success is not None %}
<div>
<h6><strong>{{ success }}</strong><h6>
</div>
{% endif %}
</div>
</section>
Я попытался создать подробный вид и создать блок шагов в этом шаблоне, и когда вы нажимаете кнопку «Далее», он пропускает следующий шаг через тег шаблона блока шагов. Хотя я не мог понять, как щелкнуть далее, и он ссылается на шаг в подробном представлении, а не на шаг в разбитом на страницы запросе из представления test_steps.