自动重新加载页面,无需再次重新输入 URL Django
reload page automatically without needing to RE-enter URL again Django
我的网页由两部分组成,上部是让用户输入数据的部分,底部显示所有数据在数据库中以 table 形式。当用户select点击上部的"Add"按钮时,数据将被保存到数据库中并输出到网页底部的table中。无论如何,一旦我 select "Add" 按钮显示 table ?现在代码正在做的是当 "Add" 按钮被 selected 时,它将加载一个新表单,但随后整个 table 将消失。我必须 手动 再次输入此地址“http://127.0.0.1:8000/hrfinance/lscholarship/”,然后只会出现 table。即使刷新页面也不起作用。下面是我在
中的代码
views.py:
def scholarship(request, id=None):
query_results = []
if request.method == "POST":
form = ScholarshipForm(request.POST)
if form.is_valid():
scholarship = form.save(commit=False)
scholarship.save()
else:
form = ScholarshipForm()
id = request.GET.get('scholarship')
query_results = Scholarship.objects.all()
data = {
'query_results':query_results,
'form': form
}
return render(request, 'hrfinance/add_remove_scholarship.html', data)
models.py
class Application(models.Model):
studentID = models.CharField("Student ID", max_length=8, validators=[MinLengthValidator(8)], primary_key=True, default="")
studentName = models.CharField("Student Name", max_length=500, default="")
scholarship = models.TextField("Scholarship")
add_remove_scholarship.html
<div align="center" >
<form method="POST" onsubmit="return validation()" action="">
{% csrf_token %}
{{ form.errors }}
<p>Upload File: {{ form.doc }}</p>
<p>Faculty: {{ form.faculty }} </p>
<p>Opening date: <input id="odate" type="date" name="openDate"> </p>
<p>Closing date: {{ form.closeDate }} </p>
<input type="submit" name="AddScholarship" value="Add Scholarship" >
</form>
</div>
<br></br>
<button id="button" type="button">Delete Selected Scholarship</button>
<br></br>
{{query_results}}
<form method="POST" action="">
{% csrf_token %}
<table id="example" class="display" cellspacing="0" width="100%" border="1.5px">
<tr align="center">
<th> Scholarship </th>
<th> Faculty </th>
<th> Open Date </th>
<th> Close Date </th>
</tr>
{% for item in query_results %}
<tr align="center">
<td>{{item.doc}}</td>
<td>{{item.faculty}}</td>
<td>{{item.openDate}}</td>
<td>{{item.closeDate}}</td>
</tr>
{% endfor %}
</table>
</form>
def scholarship(request, id=None):
query_results = []
if request.method == "POST":
form = ScholarshipForm(request.POST)
if form.is_valid():
scholarship = form.save(commit=False)
scholarship.save()
else:
id = request.GET.get('scholarship')
query_results = Scholarship.objects.all()
form = ScholarshipForm()
data = {
'query_results':query_results,
'form': form
}
return render(request, 'hrfinance/add_remove_scholarship.html', data)
您需要将查询移出 else
条件。
不过,随着数据库中行数的增加,这种方法会花费很多时间。更好的方法是使用 jquery Ajax 方法更新数据库中的数据,并在数据库更新后使用 javascript/Jquery 动态显示它。
最佳做法是使用 Post/Redirect/Get 模式。这也将解决您的问题:GET 请求将清除表单并显示新的查询结果。
如果表单成功保存,您只需 return 重定向到当前页面。然后浏览器将执行 GET 请求。这可以防止意外重复提交表单,例如用户在它仍然是 POST 请求时重新加载当前页面:
from django.shortcuts import redirect
def scholarship(request, id=None):
query_results = []
if request.method == "POST":
form = ScholarshipForm(request.POST)
if form.is_valid():
scholarship = form.save(commit=False)
scholarship.save()
# Return a redirect to the same page
return redirect('/path/to/current/page/')
...
我的网页由两部分组成,上部是让用户输入数据的部分,底部显示所有数据在数据库中以 table 形式。当用户select点击上部的"Add"按钮时,数据将被保存到数据库中并输出到网页底部的table中。无论如何,一旦我 select "Add" 按钮显示 table ?现在代码正在做的是当 "Add" 按钮被 selected 时,它将加载一个新表单,但随后整个 table 将消失。我必须 手动 再次输入此地址“http://127.0.0.1:8000/hrfinance/lscholarship/”,然后只会出现 table。即使刷新页面也不起作用。下面是我在
中的代码views.py:
def scholarship(request, id=None):
query_results = []
if request.method == "POST":
form = ScholarshipForm(request.POST)
if form.is_valid():
scholarship = form.save(commit=False)
scholarship.save()
else:
form = ScholarshipForm()
id = request.GET.get('scholarship')
query_results = Scholarship.objects.all()
data = {
'query_results':query_results,
'form': form
}
return render(request, 'hrfinance/add_remove_scholarship.html', data)
models.py
class Application(models.Model):
studentID = models.CharField("Student ID", max_length=8, validators=[MinLengthValidator(8)], primary_key=True, default="")
studentName = models.CharField("Student Name", max_length=500, default="")
scholarship = models.TextField("Scholarship")
add_remove_scholarship.html
<div align="center" >
<form method="POST" onsubmit="return validation()" action="">
{% csrf_token %}
{{ form.errors }}
<p>Upload File: {{ form.doc }}</p>
<p>Faculty: {{ form.faculty }} </p>
<p>Opening date: <input id="odate" type="date" name="openDate"> </p>
<p>Closing date: {{ form.closeDate }} </p>
<input type="submit" name="AddScholarship" value="Add Scholarship" >
</form>
</div>
<br></br>
<button id="button" type="button">Delete Selected Scholarship</button>
<br></br>
{{query_results}}
<form method="POST" action="">
{% csrf_token %}
<table id="example" class="display" cellspacing="0" width="100%" border="1.5px">
<tr align="center">
<th> Scholarship </th>
<th> Faculty </th>
<th> Open Date </th>
<th> Close Date </th>
</tr>
{% for item in query_results %}
<tr align="center">
<td>{{item.doc}}</td>
<td>{{item.faculty}}</td>
<td>{{item.openDate}}</td>
<td>{{item.closeDate}}</td>
</tr>
{% endfor %}
</table>
</form>
def scholarship(request, id=None):
query_results = []
if request.method == "POST":
form = ScholarshipForm(request.POST)
if form.is_valid():
scholarship = form.save(commit=False)
scholarship.save()
else:
id = request.GET.get('scholarship')
query_results = Scholarship.objects.all()
form = ScholarshipForm()
data = {
'query_results':query_results,
'form': form
}
return render(request, 'hrfinance/add_remove_scholarship.html', data)
您需要将查询移出 else
条件。
不过,随着数据库中行数的增加,这种方法会花费很多时间。更好的方法是使用 jquery Ajax 方法更新数据库中的数据,并在数据库更新后使用 javascript/Jquery 动态显示它。
最佳做法是使用 Post/Redirect/Get 模式。这也将解决您的问题:GET 请求将清除表单并显示新的查询结果。
如果表单成功保存,您只需 return 重定向到当前页面。然后浏览器将执行 GET 请求。这可以防止意外重复提交表单,例如用户在它仍然是 POST 请求时重新加载当前页面:
from django.shortcuts import redirect
def scholarship(request, id=None):
query_results = []
if request.method == "POST":
form = ScholarshipForm(request.POST)
if form.is_valid():
scholarship = form.save(commit=False)
scholarship.save()
# Return a redirect to the same page
return redirect('/path/to/current/page/')
...