Как обрабатывать две версии одного и того же сайта - PullRequest
3 голосов
/ 17 декабря 2011

Мой проект состоит из двух версий одного и того же. Например, версия 1 - первокурсник, а версия 2 - второкурсник. Чтобы избежать избыточности, я использую те же шаблоны и представления, поскольку реализация в обеих версиях не сильно отличается. Единственная разница в этом сайте будет в URL. Такой, что

localhost:8000/freshman/computer-science
localhost:8000/sophomore/computer-science

Пользователь моего сайта может перейти на любую версию сайта, просто нажав на кнопку, а именно Freshman или Sophomore. Я не совсем понимаю, как КАК реализовать такой метод, с помощью которого я бы не стал повторяться и мог бы достичь функциональности питонским способом.

Ответы [ 3 ]

3 голосов
/ 17 декабря 2011

Я бы посоветовал использовать один шаблон URL для обоих, но передать каждому из них уникальные параметры. Это достигается с помощью функции django.con.urls.defaults.include. В этом случае первое включение устанавливает kwarg current_app на freshman, а второе на sophomore.

from django.conf.urls.defaults import *

site_patterns = patterns('',
    # put your urls here...
)

urlpatterns = patterns('',
    url(r'^freshman/',
        include(site_patterns, namespace='freshman', app_name='freshman'), {
            'current_app': 'freshman',
        }),
    url(r'^sophomore',
        include(site_patterns, namespace='sophomore', app_name='sophomore'), {
            'current_app': 'sophomore',
        }),
)

Затем, как обычно, вы можете вытолкнуть kwarg в своем представлении и вызвать уникальное поведение из этого значения:

def my_view(request, *args, **kwargs):
    current_app = kwargs.pop('current_app')

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

0 голосов
/ 17 декабря 2011

Если вы имеете в виду, что код и схема базы данных одинаковы, но нет общих данных, я бы посоветовал вам развернуть два полных, отдельных экземпляра приложения на одном сервере (или более, в зависимости от) и ваш веб-сервер направляет /sophomore запросы в одно приложение, а /freshman - в другое. Создайте отдельную настройку для разработки / тестирования и используйте контроль версий для отправки изменений кода в обе установки.

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

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

0 голосов
/ 17 декабря 2011

Существует множество методов, с помощью которых эта функциональность может быть достигнута с помощью фреймворка django.Один из способов, который я могу предложить прямо сейчас, - использовать сессия django

Полная документация сессий доступна ЗДЕСЬ

Вы можете сохранить переменнуюв сессиях, давайте назовем это type .Когда пользователь нажимает на Freshman, тип будет «F» или «S» в последнем случае.Так что

request.session[ 'type' ] = 'f' #when Freshman is clicked
request.session[ 'type' ] = 's' #when Freshman is clicked

Чтобы узнать, какой тип используется для сайта, просто

request.session.get( 'type', '' ) #this would return 'f' || 's' || ''

'' будет в том случае, если пользователь не нажал ни на один из двух вариантов.

Хотя это очень простой и применимый способ, но, если честно, я не большой поклонник использования сессий, поэтому мне хотелось бы увидеть больше методов, которые будут перечислены.

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