Джанго общего шаблона контролируется, какие переменные? - PullRequest
0 голосов
/ 15 декабря 2009

Я разрабатывал какое-то приложение для 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?

РЕДАКТИРОВАТЬ: Похоже, что некоторая информация, которую я хочу использовать для настройки шаблона, уже имеет имя и должна указываться внутри модели.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2009

Как говорит MYYN, ваш вопрос не очень понятен. Однако я предполагаю, что вы хотели бы сделать следующее:

  1. Создание универсального шаблона
  2. Динамически загружать этот шаблон на основе модели и других переданных параметров
  3. Таблица в шаблоне заполняется необходимыми формами и т. Д.
  4. Создание представлений для отправки форм на

Я бы использовал собственный шаблонный тег, а не включал код в вашу модель (так как это чисто вопрос презентации, т.е. вы хотели бы, чтобы все поля были доступны в модели, но отображали только некоторые из них). Например, вы можете создать тег шаблона, который вы называете как:

{% gen_table somemodel %}

Документация для тегов шаблонов

Также прочитайте этот замечательный пост о пользовательских шаблонных тегах и некоторых из моих примеров кода .

Я также заметил, что вы, кажется, определяете пользовательский метод в своем классе модели, однако я считаю, что способ сделать это - создать менеджер пользовательских моделей (прочитайте это сообщение в блоге ), также можно найти пример здесь

0 голосов
/ 15 декабря 2009

Я не совсем уверен в вашем вопросе и вашем коде, но вот небольшой рассказ о _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]: 
...