【问题标题】:Django general template controled by which variables?Django 通用模板由哪些变量控制?
【发布时间】:2010-12-26 18:06:33
【问题描述】:

我一直在开发一些 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。

【问题讨论】:

    标签: python django django-templates django-forms


    【解决方案1】:

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

    1. 创建通用模板
    2. 根据模型和传递的其他参数动态加载此模板
    3. 模板中的表格填充了必要的表格等
    4. 为要提交的表单创建视图

    我会使用自定义模板标签,而不是在模型中包含代码(因为它纯粹是一个演示问题,即您希望模型中的所有可用字段,但只显示其中一些)。例如,您可以创建一个模板标签,您可以将其称为:

    {% gen_table somemodel %}
    

    Documentation for template tags

    还可以阅读custom template tags 上的这篇精彩帖子和我的一些sample code

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

    【讨论】:

      【解决方案2】:

      我不确定你的问题和你的代码,但这里有一个关于_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]: 
      

      【讨论】:

      • 这很有用,谢谢,不知道 _meta,但在这种情况下,我想配置每个模型将显示哪些列,而不是全部,因为在某些情况下列太多或者其中一些信息不是很丰富。我的问题更多是关于是否有一个标准位置可以为它包含的任何模型放置这种通用模板的配置,如果没有标准位置,那么模型定义是否可以。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      相关资源
      最近更新 更多