Избежание избыточного кода в мобильных / настольных системах с помощью инфраструктуры сайтов Django - PullRequest
3 голосов
/ 01 апреля 2011

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

views.py

from django.contrib.sites.models import Site

def my_view(request):
    current_site = Site.objects.get_current()
    if current_site.domain == 'foo.com':
        # Render desktop home page
    elif current_site.domain == 'm.foo.com':
        # Render mobile home page

К сожалению, это означает, что я сделаю выбор if / then вкаждый вид я пишу.Могу ли я вместо этого сделать следующее:

views.py

from django.contrib.sites.models import Site

current_site = Site.objects.get_current()
if current_site.domain == 'foo.com':
    def my_view(request):
        # Render desktop home page
elif current_site.domain == 'm.foo.com':
    def my_view(request):
        # Render mobile home page

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

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Посмотрели ли вы это приложение: http://pypi.python.org/pypi/django-mobility?

Использование промежуточного программного обеспечения для обнаружения устройства и декораторов для переключения шаблонов в зависимости от входящего устройства - хороший способ избежать избыточных конструкций if / else.

И если вы посмотрите на примеры, приведенные для Django-Mobility, они выглядят довольно похоже на вашу желаемую конструкцию:

def view(request):
    ...

@mobilized(view)
def view(request):
   ...
1 голос
/ 02 апреля 2011

Вы можете использовать промежуточное программное обеспечение, чтобы определить, относится ли запрос к поддомену 'm' или нет, а затем указать правильный URL-адрес conf, чтобы направить вас к нужным представлениям. Я использовал модифицированную версию приложения django-subdomains для этого, и она работает хорошо. Это эффективное и простое решение, если логика просмотра вашего мобильного сайта сильно отличается от логики просмотра вашего обычного сайта. Вот ссылка:

https://github.com/tkaemming/django-subdomains

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

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