Django:用Javascript发送POST请求,但随后显示更新的页面而不是旧页面

lyr7nygr  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(141)

我的主模板中有一个输入触发了一个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,但我不知道我应该如何用新模板替换旧模板。

tjjdgumg

tjjdgumg1#

编辑:我在index.html的输入中添加了一个表单。我不知道为什么这样做,因为我已经在javascript中发出了POST请求。
如果有人能解释为什么它的工作,我仍然会很感激。

相关问题