2010-07-18 55 views
1

如何從Django管理結果列表更改輸出結果?我一直在尋找進入change_result_list.html模板文件,但所有我能找到的是:定製Django管理結果列表

{% for item in result %}{{ item }}{% endfor %} 

這將輸出類似:

<tr> 
    <td> 
     <input type="checkbox" class="action-select" value="2" name="_selected_action" /> 
    </td> 
    <th> 
     <a href="1/">Lorem Ipsum</a> 
    </th> 
</tr> 

顯然,元件切斷我的設計。無論如何改變它爲td

回答

2

有沒有「簡單」的方法來做到這一點,所以我必須首先問你爲什麼需要這樣做。我不明白爲什麼<th>元素會「明顯」破壞你的設計。 <th>元素相當於<td>,但默認情況下具有額外樣式(通常爲font-weight: bold; text-align: center;)。你應該能夠在你的CSS中解釋這個。

這就是說,這裏有一些方法可以看。 th/td選項在django.contrib.admin.templatetags.admin_list.py的第169行(Django 1.2.1)上確定。這是它出現在上下文的剪斷摘要:

def items_for_result(cl, result, form): 
    first = True 
    for field_name in cl.list_display: 
     # ... 
     if (first and not cl.list_display_links) or field_name in cl.list_display_links: 
      table_tag = {True:'th', False:'td'}[first] 
      first = False 
      # ... 
      yield mark_safe(u'<%s%s><a href="%s"%s>%s</a></%s>' % (table_tag, row_class, url, ...) 
     else: 
      # ... 
      yield mark_safe(u'<td%s>%s</td>' % (row_class, result_repr)) 

正如你所看到的,有改變決定table_tag價值的行爲,沒有明顯的方式,使一些你有三種選擇:

  • 定義一個「items_for_result」模板標籤,它調用上面的代碼標籤,並用<td> s代替所有值中的任何<th>。然後,您可以在「admin_list」加載後覆蓋「change_list.html」和{%load%}標籤。
  • 編輯Django代碼。不過你會後悔的。
  • 如果你有沒有在表中是一個鏈接到編輯頁面的項目列OK(我無法想象,你爲什麼會),你可以在你admin.py使用這個醜陋的黑客:

    admin.site.register(YourModel, YourModelAdmin) 
    admin.site._registry[YourModel].list_display_links = ['not_a_field_name',]` 
    

    由於管理模型只驗證一次,這發生在register()被調用時,你可以註冊ModelAdmin後來取,並給它一個無效list_display_links財產。

+0

確實,編輯CSS要容易得多。然而,從可用性的角度來看(和我的理想主義),th只能用於標題單元格。這只是一種荒謬的原因,他們爲什麼使用th而不是td。 – Furunomoe 2010-07-18 17:22:38