2017-05-30 105 views
0

我想在用戶提交表單後顯示加載GIF,但如果用戶未填寫必填字段並收到表單填寫錯誤,則不顯示。如何根據返回的錯誤控制模板渲染? Django

這是我做過什麼:

{% if not profile_form.errors %} 

    <input type="submit" value="Submit" class="btn btn-primary btn-lg " onclick="loading();" /> 
{% else %} 
    <input type="submit" value="Submit" class="btn btn-primary btn-lg" /> 

{% endif %} 

onclick="loading();負載GIF。

但它不起作用。

它顯示加載gif,如果我提交也如果用戶沒有填寫必填字段,這看起來表單被絞死。

這是函數:

function loading(){ 
    $("#loading").show(); 
    $("#content").hide();  
} 

這是模板:

{% block body_block %} 
<div id="loading"><img src= "{% static 'images/giphy.gif' %}"></div> 

<div id="content" class="col-sm-6 col-sm-offset-3" style="margin-top: 100px;margin-bottom: 100px" > 

<h1>Create Your Profile</h1> 

    <form method="post" action="?next=/" enctype="multipart/form-data"> 
       {% csrf_token %}      
       {{ user_form|crispy }} 
       {{ profile_form|crispy }} 

{% if not profile_form.errors %} 

    <input type="submit" value="Submit" class="btn btn-primary btn-lg " onclick="loading();" /> 
{% else %} 
    <input type="submit" value="Submit" class="btn btn-primary btn-lg" /> 

{% endif %} 
     </form>  

</div> 
{% endblock %} 

這是CSS:

/*LOADING GIF*/ 
div#loading { 
    display: none; 
    cursor: wait; 
    position: fixed; 
    top: 50%; 
    left: 50%; 
    transform: translate(-50%, -50%); 
    z-index: 4; 
    } 
+1

*但它不起作用。*展開。由於視圖中的第一個渲染沒有錯誤,因此至少會顯示GIF,直到窗體在視圖中得到驗證。你可以改爲使用JS驗證。 –

+1

發佈功能代碼?你在哪裏宣佈你的功能? – Exprator

+0

我添加了一個編輯。 – Seio

回答

1

你誤解了邏輯流在這裏。直到之後表單提交後,視圖才重新呈現模板以顯示這些錯誤。在首先提交表單的時候,永遠不會有任何錯誤,所以你的if語句總是如此。

由於Raja在評論中說,唯一的方法是通過Ajax提交表單,然後通過JS顯示gif。

+0

大概時間你在這裏!節省了我們的時間! :) –

+1

我不得不偶爾睡覺。有時我甚至做一些工作...... –