С Django, есть ли лучший способ динамического импорта представлений в urls.py? - PullRequest
2 голосов
/ 20 сентября 2010

Резюме:

Скажем, у меня есть проект в Django под названием "devsite", который будет развернут сначала в промежуточном проекте (также называемом "devsite") и, наконец, в живую кодовую базу (где проект называется "liveite"). Во время развертывания в реальном времени мне пришлось бы вручную вносить изменения в urls.py, чтобы импортировать представления из нужного проекта. Это означает, что urls.py в "devsite" будет использовать что-то вроде:

from devsite import views

И urls.py для "liveites" будет изменен на:

from livesite import views

Мое решение:

Кажется, работает следующее (пока ограниченное тестирование). Я создал переменную settings.py для получения имени проекта из каталога, например:

settings.py

# /settings.py
import os.path
PROJECT_NAME = os.path.basename(os.path.dirname(__file__))

А затем используйте это для импорта правильных представлений в urls.py:

urls.py

# /urls.py
from django.conf import settings
website = __import__('%s' % settings.PROJECT_NAME, fromlist=['views'])
...
urlpatterns = patterns('',
    (r'^monty/$', website.views.monty),
)

Мой вопрос:

Я хотел бы знать следующее:

  1. Это хороший способ делать то, что я хочу, или есть лучший способ кодировать это?
  2. Или мне нужно переосмыслить весь рабочий процесс развертывания?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Взгляните на zc.buildout и djangorecipe - которые, как говорит Джейкоб Каплан-Мосс,

...is an exceedingly civilized way to develop an app

http://jacobian.org/writing/django-apps-with-buildout/

Помимо общей «цивилизованности», djangorecipe позволяет вам иметь более одного файла настроек, который можно импортировать друг от друга. Затем вы можете указать, какой файл настроек использовать в конкретной установке.

development.py

from settings import *
DEBUG = True

live.py

from settings import *
DEBUG = False

... и это только верхушка айсберга

0 голосов
/ 20 сентября 2010

Я бы спросил, почему у вас есть разные проекты для ваших живых и девайс-сайтов.Почему бы не сводить все различия к настройкам / настройкам (как, например, с PROJECT_NAME), но придерживаться общих проектов?Похоже, что вы увеличиваете шансы на ошибку между dev и live, чем больше вы делаете каждый сайт уникальным.

Кроме этого, я думаю, что то, что вы делаете, более или менее хорошо.Другой шаблон, который я видел, выглядит примерно так:

try:
    from livesite import views
except ImportError:
    from devsite import views
...