2012-12-22 6 views
7

Sto imparando Django. Il mio background è da PHP e Java con esperienza nell'utilizzo dei framework Model View Controller. Ho sempre avuto un file separato per ognuna delle mie viste, modelli e modelli - ma il tutorial di Django menziona solo con views.py e models.py.Buona pratica: organizzare views.py nelle app Django

Questo sembra essere ok se si dispone di una piccola applicazione - cosa succede se si desidera organizzare le visualizzazioni e modelli per il loro scopo? Ad esempio, una vista Progetti e una vista Milestones. Mi auguro che non avrebbe dovuto creare un altro pacchetto di Python (app) per ogni modulo vista:

python manage.py startapp projects

python manage.py startapp milestones

posso supporre che si può avere un milestones.py e un progetti. py per le tue viste e modelli invece di un generic views.py e models.py? Quindi i modelli possono essere importati, se necessario, nelle viste e le richieste vengono indirizzate a viste specifiche?

risposta

17

Non c'è alcun problema con l'avere più file contenenti viste e modelli.

In realtà tutto ciò che serve è il modulo views e il modulo models. In python il modulo è un file che termina con .py o cartella che contiene il file __init__.py.

L'applicazione può essere simile:

app_folder 
    - views 
    | - __init__.py 
    | - some_view.py 
    | - some_other_view.py 
    - models 
    | - __init__.py 
    | - some_model.py 
    | - some_other_model.py 

Il models/__init__.py dovrebbe essere simile a codice qui sotto (per sottomoduli per essere guardato da Django a tutti).

from some_model import SomeModel 
from some_other_model import SomeOtherModel 

L'unica differenza con l'approccio comune è quello di avere app_label definito nei modelli:

class SomeModel(models.Model): 
    class Meta: 
     app_label = 'app_folder' 

Scopri i relativi doc entry.

Aggiornamento:

La documentazione versione di sviluppo dire che non sarà necessario definire app_label in questo caso più di partenza con 1,7 rilascio.

Postfazione:

Infatti, se avete bisogno di fare che di solito significa che la vostra applicazione è troppo grande e si dovrebbe dividere in diverse applicazioni. La maggior parte delle persone che vengono a Django hanno paura di avere molte piccole app. Più app di terze parti leggi e più realizzi app dovrebbe risolvere uno e un solo problema. Nel tuo esempio con l'app milestones sembra perfettamente legittimo.