我的应用的urls.py是:
from django.urls import path
from . import views
app_name = 'javascript'
urlpatterns = [
path('create_table', views.create_table, name='create_table')
我的views.py是:
def create_table(request):
if request.method == 'POST':
row_data = "this is row data"
context = {'row_data': row_data}
return render(request, 'javascript/create_table.html',context)
我的create_table.html是:
{% load static %}
<form action="" method="post">
{% csrf_token %}
<button id="create_table">Get data</button>
</form>
<div id="place_for_table"></div>
<script type="text/javascript">
var row_data = "{{ row_data }}"
</script>
<script src="{% static 'javascript/scripts/create_table.js' %}"></script>
我的create_table.js是:
function create_table() {
document.getElementById("place_for_table").innerHTML = row_data;
}
document.getElementById("create_table").onclick = function() {
create_table()
}
我想要达到的目标是:当请求/create table
URL时,只显示按钮。按下按钮时,row_data
变量的值显示在按钮下方。
此时数据显示为眨眼,然后消失。
我想我在视图函数中没有正确区分POST和GET方法。此外,我的逻辑基于默认情况下使用GET方法请求URL的假设。但是,如果我在视图的开头放置print(request.method)
,则会打印POST。
此外,每当我第一次加载页面或刷新页面时,我都会收到Firefox警告:“要显示此页面,Firefox必须发送重复任何操作(例如搜索或订单确认)的信息。早些时候演出。“
我尝试的其他事情是使用基于类的视图和post并获取defs或将create_table的URL放在button formaction=
标记中,但这没有帮助。
我很感激有关如何实现这一目标的任何建议。
答案 0 :(得分:0)
问题可能是因为当您submitting
表单时refreshes/reloads
表示您的页面,即/create_table
url,因为row_data resets
This 即使您没有明确地向表单内的按钮提供type="submit"
,也可以帮助您了解按钮提交的原因。
我们的目标是防止事件发生。可以使用return false
侦听器中的简单onclick
语句来完成此操作,如下所示:
function create_table() {
document.getElementById("place_for_table").innerHTML = row_data;
}
document.getElementById("create_table").onclick = function(event) {
create_table();
return false;
}