我创建了一个应用程序来检查如何在Django中运行后台任务,但是在渲染中遇到了我无法解释的错误,并且在任何地方都找不到类似的问题。我无法弄清楚哪里出了错误。有我的views.py
from django.shortcuts import render, get_object_or_404, redirect
from django.http import JsonResponse
from django.http import HttpResponseBadRequest, HttpResponseRedirect, HttpResponse
from django.urls import reverse
import json
import datetime
from .models import Simulation, get_simulation
from .forms import SimulationForm
# Create your views here.
def simulation_page(request):
context = {
"simulations_exists": Simulation.objects.all().exists()
}
return render(request, 'simulation_page.html', context)
def simulate(request):
if request.method == 'POST': #
data = json.loads(request.body)
action = data['action'] # 0 or 1 that mean run or stop
sim = get_simulation()
if action == "0" and sim.status == True:
sim.status = False
sim.save()
elif action == "1" and sim.status == False:
sim.status = True
sim.save()
context = {
"simulations_exists": True,
"days_passed": sim.get_simulation_day(),
"simulation_today_str": (sim.today).strftime("%d %B, %Y"), # 06/12/18 -> 12 June, 2018
"simulation_status": sim.status
}
return render(request, "simulation_page.html", context=context)
return HttpResponseBadRequest()
有我的Simulation_page.html模板:
{% extends "base.html" %}
{% block content %}
<h1>Simulation</h1>
<div id='simulation_info'>
simulation_status: {{simulation_status}}
</div>
<div class='container'>
{% if not simulations_exists %}
<p><a href="{% url 'simulation:simulation_create' %}">Create First Simulation</a></p>
{% else %}
{% if not simulation_status %}
<p><a data-to-url="{% url 'simulation:simulate' %}" data-action='1' id="start_simulation" onclick="simulation(this)" class="btn btn-primary" role="button">Start Simulation</a></p>
{% else %}
<h3><i>days_passed: {{days_passed}}</i></h3>
<h3><i>simulation_today_str: {{simulation_today_str}}</i></h3>
<h3><i>simulation_status: {{simulation_status}}</i></h3>
<hr>
<p><a data-to-url="{% url 'simulation:current_simulation_info' %}" id="refresh_simulation" onclick="refresh_simulation(this)" class="btn btn-info" role="button">Refresh Simulation</a></p>
<hr>
<p><a data-to-url="{% url 'simulation:simulate' %}" data-action='0' id="stop_simulation" onclick="simulation(this)" class="btn btn-danger" role="button">Stop Simulation</a></p>
{% endif %}
{% endif %}
</div>
{% endblock content %}
urls.py:
from django.contrib import admin
from django.conf.urls import url, include
from .views import simulation_page, simulate
urlpatterns = [
url(r'^simulation_page/', simulation_page, name='simulation_page'),
url(r'^simulate/', simulate, name='simulate'),
]
simulation.js:
function simulation(sim){
var to_url = $(sim).attr('data-to-url');
var action = $(sim).attr('data-action');
var ajaxdata = {
action: action,
};
$.ajax({
url: to_url,
data: JSON.stringify(ajaxdata),
dataType: 'json',
method: 'POST',
beforeSend: function (xhr) {
xhr.setRequestHeader('X-CSRFToken', csrf_token)
}
});
};
我真的不明白为什么运行模拟时它不会在视图模拟中的模板新上下文中呈现,而是向我显示带有Simulation_page视图上下文的页面。