Django通用模板由哪些变量控制?

时间:2009-12-15 10:01:44

标签: python django django-templates django-forms

我一直在开发一些Django应用程序,并且有一些重复的代码用于不同的模型。我想创建一个通用表模板,并将Model类,模型实例列表和Form类传递给它,以便它可以呈现页面并生成表单来添加/删除元素。然后创建一些通用的添加/删除视图以使用此表单。

为每个不同的模型定义模板配置的正确部分是什么?如果我只是创建一些类静态变量和函数,这是正确的:

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。

2 个答案:

答案 0 :(得分:0)

我对你的问题和你的代码并不是很确定,但这里有一篇关于_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_inside作为参数调用Sample(注意: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]: 

答案 1 :(得分:0)

正如MYYN所说,你的问题不是很清楚。但是我假设您想要执行以下操作:

  1. 创建通用模板
  2. 根据模型和其他传递的参数
  3. 动态加载此模板
  4. 模板中的表格填充了必要的表格等
  5. 为要提交的表单创建视图
  6. 我会使用自定义模板标签,而不是在模型中包含代码(因为它纯粹是一个演示文稿问题,即您希望模型中的所有字段都可用,但只显示其中的一些)。例如,您可以创建一个模板标记,您可以调用它:

    {% gen_table somemodel %}
    

    Documentation for template tags

    另请阅读custom template tags以及我sample code的一些精彩帖子。

    我也注意到你似乎在你的模型类中定义了一个自定义方法,但我相信这样做的方法是创建一个custom model manager(读this blog post),也可以是一个例子。找到here