我的主模板中有一个输入触发了一个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)
}
}
其中测试方法向我在www.example.com中指定的URL之一发出POST请求urls.py:
function test(tagValue)
{
var csrftoken = getCookie('csrftoken')
fetch('deleteTag', {
method: 'POST',
action: 'deleteTag',
headers: {
"X-Requested-With": "XMLHttpRequest",
"X-CSRFToken": csrftoken,
},
body: tagValue
})
}
此方法从发布请求中删除特定标记,并重定向到主页:
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,其中的标签没有被删除,只有当我刷新页面或在页面上执行一些其他操作(直接重定向到Django的www.example.com的操作)时url.py,新的index.html才会显示。
我想这是因为javascript函数没有正确返回,因此仍然呈现旧的index.html,但我不知道我应该如何用新模板替换旧模板。
1条答案
按热度按时间tjjdgumg1#
编辑:我在index.html的输入中添加了一个表单。我不知道为什么这样做,因为我已经在javascript中发出了POST请求。
如果有人能解释为什么它的工作,我仍然会很感激。