Django.contrib.flatpages без моделей - PullRequest
       11

Django.contrib.flatpages без моделей

6 голосов
/ 07 декабря 2008

У меня есть несколько плоских страниц с пустым полем content и их содержимым внутри шаблона (с полем template_name).

Почему я использую django.contrib.flatpages

  • Это позволяет мне обслуживать (в основном) статические страницы с минимальной конфигурацией URL.
  • Мне не нужно писать представления для каждого из них.

Почему мне не нужна модель FlatPage

  • Я оставляю содержимое пустым и просто указываю путь к шаблону. Поэтому я могу использовать источник в файле;
    • Я могу редактировать исходный код непосредственно из файловой системы, без помощи сервера (например, администратора).
    • Я могу воспользоваться подсветкой синтаксиса и другими функциями редактора.
  • С моделью мне приходится обслуживать светильники для плоских страниц.
    • Таким образом, данные для одного и того же объекта находятся в двух отдельных местах.
    • Если я переместу содержимое внутри прибора, его будет сложнее редактировать.
      • Даже если бы обслуживание приборов не было проблемой, мне все равно приходилось бы сбрасывать и загружать эти приборы снова и снова во время разработки.

Что я ищу

В принципе; избавление от модели FlatPage при сохранении функциональности contrib.flatpages. Я не имею четкого представления, как это должно быть решено. Если есть чистый способ изменения (например, add_to_class) FlatPages, чтобы получить информацию где-то, кроме базы данных, я бы предпочел это. Может быть, метаданные можно вставить в шаблоны, и тогда специальный менеджер, который читает эти данные, заменит менеджер по умолчанию FlatPages.

Если я не предпочитаю ручное редактирование над функциональностью администратора для плоских страниц, как можно вывести базу данных из уравнения?

1 Ответ

9 голосов
/ 07 декабря 2008

Использование общего вида direct_to_template будет намного проще. Вы можете использовать переданные параметры в одном представлении, чтобы указать фактический шаблон в urls.py, если вы не хотите добавлять запись для каждой страницы:

r'^foo/(?P<template_name>.+)/$','direct_to_template', {'template': 'foo_index.html'}),

Затем импортируйте шаблон в ваш foo_index.html:

{% include template_name %}
...