2014-10-17 9 views
8

Django 1.7 ma introduced a new way for handling application configuration, który jest niezależny od models.py. Jednak metoda przy użyciu nowego AppConfig wymaga tego wiersza:Czy jest zalecane podejście do obsługi AppConfig podczas projektowania aplikacji dla Django 1.6 i 1.7?

from django.apps import AppConfig 

Niestety, ten złamie w Django 1.6 ponieważ nie ma moduł apps.

Czy możliwe jest zapewnienie zgodności aplikacji z wersjami 1.6 i 1.7 przy użyciu importu warunkowego, czy też jest to kwestia zasad podzielonego kodu? Jeśli tak, to czy istnieje zalecany przewodnik, najlepiej od deweloperów Django, jak to zrobić?

+0

Nie wiem, czy dostaniesz oficjalny przewodnik lub rekomendację, ale czy próbowałeś po prostu dodać moduł 'apps' z wersji 1.7 do projektu Django 1.6 i próbujesz ręcznie go zintegrować? Jestem pewny, że będą ostre krawędzie, ale wciąż jest to ostatni dodatek, więc nie może zbytnio zepsuć rzeczy. Ponadto, ma tylko, [dwa pliki] (https://github.com/django/django/tree/master/django/apps), więc nie może być * dużo * pracy, prawda? – yuvi

Odpowiedz

4

jak na temat korzystania AppConfig tylko jeśli wersja Django> = 1,7 (wziąć to pod uwagę przy __ startowych __.py pliku zbyt):

# myapp/apps.py 
from django import VERSION as DJANGO_VERSION 
if DJANGO_VERSION >= (1, 7): 
    from django.apps import AppConfig 
    class MyAppConfig(AppConfig): 
     ... 

# myapp/__init__.py 
from django import VERSION as DJANGO_VERSION 
if DJANGO_VERSION >= (1, 7): 
    default_app_config = 'myapp.apps.MyAppConfig' 
+0

Dałem temu szansę i wygląda na to, że działa dobrze. Wybrałem to, ponieważ wolę wyraźne kontrole od wyjątków. –

9

nie jestem pewien co oficjalnie Django sugerowanej drodze, ale to w jaki sposób to zrobić:

# myapp/apps.py 

try: 
    from django.apps import AppConfig 
except ImportError: 
    AppConfig = object 

class MyAppConfig(AppConfig): 
    # put all the necessary stuff for AppConfig 

# myapp/__init__.py 

default_app_config = 'myapp.apps.MyAppConfig' 

ten sposób, czy to Django> = 1,7 użyje tego MyAppConfig, inaczej moduł myapp/apps.py będzie po prostu ignorowane, a to będzie działać tak samo jak poprzednio dla Django < 1,7

Powiązane problemy