我在主模板中有一个触发 onclick 调用 javascript 函数的输入:
<div class="removeTagElementChildDiv">
{% csrf_token %}
<input type="image" name="deleteTagImage" class="deleteTagImage" src="{% static 'images/deleteTag.png' %}" width = "10" height = "10" onclick="return removeTag(this.parentElement)">
</div>
这调用了这个方法:
function removeTag(removeSymbolDivForTagToRemove)
{
tagElement = removeSymbolDivForTagToRemove.parentElement
tagValue = tagElement.querySelector('button[name="tagInTagsMenu"]').value
console.log(tagValue)
if (window.confirm(`Are you sure you want to delete the, ${tagValue}, tag`))
{
return test(tagValue)
}
}
测试方法向我在 urls.py 中指定的 url 之一发出 POST 请求的地方:
function test(tagValue)
{
var csrftoken = getCookie('csrftoken')
fetch('deleteTag', {
method: 'POST',
action: 'deleteTag',
headers: {
"X-Requested-With": "XMLHttpRequest",
"X-CSRFToken": csrftoken,
},
body: tagValue
})
}
此方法从post请求中删除特定标签,并重定向到主页:
def deleteTag(request):
tagName = request.body.decode('utf-8')
Tag.objects.filter(name=tagName).delete()
tagsFromModel = Tag.objects.all()
for tag in tags:
if util.findTagByTagName(tag.name,tagsFromModel) == None: #if the tag from the original list is not in the model, it has been deleted
tags.remove(tag)
loadTagsFromModel()
print("end of delete tag method")
return(redirect("/"))
def main(request):
now = datetime.now()
time = now.strftime("%H:%M:%S")
loadTagsFromModel()
context = {'myTags':tags,'time':time}
print("tags in main",len(tags))
#problemet er, at den stadig displayer den gamle index.html når man sletter et tag
return render(request, 'index.html',context)
一切正常,数据在标签列表中正确更新。 然而,通过调试(随着时间的推移)我发现即使我打电话:
return render(request, 'index.html',context)
显示的新页面还是旧的index.html,这里的tag没有被删除。 只有当我刷新页面或在页面上执行一些其他操作(直接通过 Django 的 url.py 重定向的操作)时,才会显示新的 index.html。
我想这是关于 javascript 函数的问题,它没有正确返回,因此仍然呈现旧的 index.html,但我不知道我应该如何用新模板replace旧模板。