2009-12-15 47 views
0

我一直在開發一些Django應用程序,並且有不同型號的重複代碼。我想創建一個通用表模板,並將Model類,模型實例列表和Form類傳遞給它,以便它可以呈現頁面並生成表單以添加/刪除元素。然後創建一些通用的添加/刪除視圖來處理這些表單。Django通用模板由哪些變量控制?

哪個可以爲每個不同的模型定義模板配置的正確部分?難道是正確的,如果我只是創造一些類的靜態變量和函數,如:

class Test(models.Model): 
    # Model 
    name = models.CharField(max_length=20) 
    description = models.TextField(blank=True) 

    # Template configuration 
    title = "Test" 
    table_columns = ['name', ] # Columns I want to show in the table 

    def get_columns(self): 
     return [self.name, ] 

或者是有一些清潔劑來定義這種在Django的事情呢?

編輯:似乎我想用來配置模板的一些信息已經有一個名稱,應該進入model.Meta,如verbose_name或verbose_name_plural。

回答

0

由於MYYN說,你的問題不是很清楚。但是我想你想做到以下幾點:

  1. 創建一個通用模板
  2. 動態加載基於模板通過
  3. 表的模型和其他PARAMS此模板填充了必要的形式等
  4. 創建視圖,爲形式遞交給

我會用一個自定義模板標籤而不是包括在模型中的代碼(因爲它純粹是一個演示文稿的問題,也就是你想要模型中的所有可用字段,但只顯示其中的一些字段)。例如,你可以創建你打電話像一個模板標籤:

{% gen_table somemodel %} 

Documentation for template tags

還可以閱讀這個偉大的職位上custom template tags和我的一些sample code的。

我也注意到你似乎在模型類中定義一個自定義的方法,但是我認爲要做到這一點的方法是通過創建一個custom model manager(讀this blog post),也是一個例子可以發現here

0

我不exaclty肯定你的問題,你的代碼,但這裏是一個簡短的故事_meta ...

訪問類的列名,你可以檢查類的_meta屬性。

例子。樣本模型,它定義了三個領域,一個輔助方法whats_inside,這只是迭代_meta.fields並打印出類的列的名稱:

from django.db import models 

def whats_inside(cls): 
    for item in cls._meta.fields: 
     print item.name 

class Sample(models.Model): 

    name = models.CharField(max_length=80) 
    desc = models.CharField(max_length=80) 
    date_added = models.DateTimeField(auto_now=True, auto_now_add=True) 

當我們開始./manage shell,我們可以調用whats_insideSample爲參數(注意:ms只是封裝模型位於在這種情況下,你會有所不同):

$ ./manage.py shell 
Python 2.6 (r26:66714, Oct 4 2008, 02:48:43) 
Type "copyright", "credits" or "license" for more information. 

IPython 0.9.1 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object'. ?object also works, ?? prints more. 

In [1]: from ms.models import Sample, whats_inside 

In [2]: whats_inside(Sample) 
id 
name 
desc 
date_added 

In [3]: 
+0

這是有用的謝謝,不知道_meta,但在這種情況下,我想配置哪些列將顯示爲每個模型,而不是所有的人,因爲在某些情況下,有太多的列或其中一些不是很豐富。 我的問題更多的是關於是否有一個標準的地方爲它所包含的任何模型放置這種通用模板的配置,如果沒有標準的地方,那麼如果模型定義是好的。 – plmet 2009-12-15 11:09:21