Что лучше для сайтов Django настроить переменные конфигурации сайта? - PullRequest
9 голосов
/ 21 июня 2011

все!Я пишу блог на сайте Django.

Я новичок в Django.Поскольку у Django есть философия слабой связи, я считаю, что лучше всего следовать их убеждениям при использовании их фреймворка.

Поэтому я сталкиваюсь с дилеммой:

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

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

Единственное, что я могу обойти,думать о настройке переменных среды в файле моих сайтов .wsgi (я использую Apache и mod_wsgi для обслуживания скриптов Python) Но я не думаю, что путаница с переменной среды достаточно «чиста».

Может кто-нибудь предложитьмне лучшее решение?

Ответы [ 2 ]

9 голосов
/ 21 июня 2011

Первое, что вы можете сделать, это настроить эти переменные в модуле настроек вашего проекта, многие приложения делают это:

# settings
BLOG_TITLE = 'My title'

Тогда хорошей практикой является предоставление настроек по умолчанию, поэтому ваше приложение должно иметь файл настроек

# blog/settings.py
from django.conf import settings
BLOG_TITLE = getattr(settings, 'BLOG_TITLE', 'MY default title')

# Then wherever, views or context processor
from blog import settings # See how we're not importing project's settings

title = settings.BLOG_TITLE

Другой альтернативой является создание модели «Блог», которая содержит все эти переменные. Это может привести к тому, что в вашем приложении будет привязан блог на сайтов Django

from django.contrib.sites.models import Site
class Blog(models.Model):
  site = models.OneToOneField(Site) # Tied up to a Django site
  title = models.CharField(max_length=256)

Теперь вы можете изменить эти значения в интерфейсе администратора и использовать их в своих представлениях или контекстном процессоре

site = Site.objects.get_current() # Installed Django Sites app and middleware
blog = site.blog
print blog.title
4 голосов
/ 21 июня 2011

Вы можете создать файл настроек или констант в папке вашего приложения и использовать его. Таким образом, все ваши константы будут привязаны к вашему приложению:

apps/
  blog/
    __init__.py
    models.py
    urls.py
    constants.py # <-- here it is!

Файл может выглядеть так:

BLOG_TITLE = 'My super blog'
# ...

И вы можете использовать константы тура следующим образом:

import blog.constants
# ...
return render_to_response('index.html', {title: blog.constants.BLOG_TITLE})

И в шаблоне:

<title>{{ title }}</title>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...