2015-04-05 19 views
4

我想覆蓋單個模型或單個應用程序的submit_line.html(可以工作 - 應用程序只有一個模型)。我在文檔中看到我無法做到這一點(https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#templates-which-may-be-overridden-per-app-or-model覆蓋單個模型或應用程序的submit_line.html

是否有某種方法來測試模板被調用的模型或應用程序,以便我可以添加一些條件行爲?或者,是否有某種方法可以使用不同的模板替代特定應用或模型的submit_line.html?

mishbah的答案已經解決了我最初的問題,但現在我面臨另一個問題 - 當我的代碼完成後,某些運行會添加該行。我不希望這種情況發生。

這裏就是我試圖完成:

  1. 用戶單擊Add按鈕
  2. 添加對象,顯示的網頁我的自定義按鈕
  3. 當點擊我的按鈕,我執行一個Ajax調用並顯示結果在添加div下方,並且直到用戶單擊按鈕時纔會顯示此頁面。

這一切工作 - 我唯一的問題是行被添加到數據庫 - 我會以某種方式防止發生這種情況。

這裏是我的代碼:

在主管理頁面我剛纔添加按鈕:

enter image description here

這裏是我的change_form.html:

{% extends "admin/change_form.html" %} 

{% block submit_buttons_bottom %} 

<style type="text/css"> 
    #id_tool_configuration { 
     white-space: pre-wrap; 
    } 
</style> 

<div class="submit-row"> 
    <input value="Configure" class="default" name="configure" onclick="configureTools(document.getElementById('id_tool_configuration').value); " /> 
</div> 

<script src="/static/scripts/jquery-1.7.js" type="text/javascript"></script> 

<script type="text/javascript"> 
    function configureTools(tcd) { 
     var toolConfigData = tcd; 
     var request = new XMLHttpRequest(); 
     var params = 'toolConfigData='+encodeURIComponent(toolConfigData); 
     request.open('GET', '{% url 'motor.configuration.views.configure' %}?'+params); 
     request.setRequestHeader("Content-type", "text/plain; charset=utf-8"); 

     request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
       if (request.status == 200) { 
        status = 'Confguration results:'; 
       } 
       else { 
        status = 'Confguration failed'; 
       } 

       $('.submit-row').after(
        $('<span />') 
        .html('<pre> ' + status + '\n' + request.responseText + '</pre>') 
        .after($('<button />').text('Return').click('function() { return; }')) 
       ); 
      } 
     }; 

     request.send(null); 
     return false; 
    }; 
</script> 

{% endblock%}

回答

4

可以覆蓋submit-row。簡單地覆蓋change_form模板在你的ModelAdmin:

class YourModelAdmin(admin.ModelAdmin): 
    change_form_template = 'path/to/custom/change_form.html' 

而且在您的自定義change_form.html,你將需要:

{% extends "admin/change_form.html" %} 

並覆蓋submit_buttons_bottom塊:

{% block submit_buttons_bottom %} 
    {# custom submit row goes here #} 
{% endblock %} 

你可以定義您自己的自定義submit_row templatetag,使用原始模板標籤獲得靈感:

https://github.com/django/django/blob/1101467ce0756272a54f4c7bc65c4c335a94111b/django/contrib/admin/templatetags/admin_modify.py#L24

另請參閱該answer關於如何確定模板的路徑解決方案。

+0

這很好。謝謝!但是在我的自定義代碼運行後,它仍然運行默認的添加代碼。我怎樣才能防止呢? – 2015-04-05 12:36:43

+0

默認添加代碼是什麼意思?你可以添加示例代碼..爲你已經做了什麼,到目前爲止你試圖實現與自定義提交行.. – mishbah 2015-04-05 23:50:56

+0

我的覆蓋submit_buttons_bottom有一個按鈕,調用一些自定義代碼,不會將行添加到數據庫。當我的代碼完成後,運行一些添加該行的東西。我不希望這種情況發生。明天我會發布我的代碼。我還會看到,如果我能找到調試器正在運行的是添加行。 – 2015-04-06 01:54:10