我正在使用Django(v1.7),我正在尋找一種「Django風格」的方式來選擇要在generic.ListView中顯示的字段。如何選擇要在Django的通用ListView類中顯示的字段?
讓我提供了一個例子:
在models.py:
class Stuff(generic.models):
field1 = model.CharField()
field2 = model.CharField()
field3 = model.CharField()
在views.py:
class StuffList(generic.ListView)
model = Stuff
在模板/ stuff_index.html
{% for stuff in object_list %}
Field1: {{ stuff.field1 }}
Field3: {{ stuff.field3 }}
{% endfor %}
有沒有辦法在views.py中顯示要顯示的字段?這樣views.py和模板/ stuff_index.html看起來像:
views.py:
class StuffList(generic.ListView)
model = Stuff
fields = ['field1','field3'] # Or something similar
在模板/ stuff_index.html
{% for stuff in object_list %}
{% for field in stuff %}
{{ field.name }}: {{ stuff.field }} <!-- Or something similar -->
{% endfor %}
{% endfor %}
是編碼不知何故這樣處理由Django框架?通過在StuffList類中重新定義get_queryset()方法的返回值,我獲得了類似的結果,但它不是「智能」解決方案。
如果您正在尋找正常的方式做,這是你所指定的第一種方式 - 就是不引用你不希望在您的模板,以顯示對象的部分。你有什麼理由在你看來寧願這樣做? – 2014-10-04 18:53:17
實際上,我想要一個通用模板並使用它來呈現多個不同對象的列表。這樣看起來更像DRY:開發者很容易添加或刪除要顯示的字段。 但是你似乎是對的,我通過例子和互聯網找到的唯一方法是編碼要直接在模板中顯示的元素。 – Matt 2014-10-04 22:15:30
最好不要以這種方式使用模板,因爲當您嘗試處理每個對象列表引入的特殊情況時,模板中會出現太多邏輯。相反,使用模板繼承讓你的模板幹掉。 – 2014-10-05 09:08:29