2011-01-21 16 views
10

Questa potrebbe sembrare una domanda soggettiva, ma sono sicuro che ci sono buone tecniche che alcuni di voi impiegano per garantire che le importazioni nei progetti Django rimangano mantenibili. Sono abituato ad avere un elenco di circa 30 diverse importazioni in ogni file, e questo viola chiaramente il principio DRY. Quindi non si tratta solo di estetica, si tratta anche di non duplicare il codice.Come mantenere le importazioni ordinate in Django?

Sto cercando un metodo che maneggi le sezioni di importazione nei file Django. Quello che mi sembra una buona idea è avere un file di importazione generico per ogni tipo di file (viste, modelli, ecc.), Che viene poi importato in alto, con ulteriori importazioni specifiche per l'applicazione. Ma questo causerebbe un sovraccarico inutile? Come dovrebbero apparire quei file e quali sono le classi importanti per ogni tipo di file?

Aggiornamento

Su richiesta, ecco un esempio da uno dei miei file views.py.

from django.shortcuts import render_to_response, get_object_or_404 
from shortcuts import render_to_context, render_template 
from django.http import HttpResponseRedirect 
from django.contrib.comments.models import Comment 
from django.template import RequestContext 
from django.contrib.auth.decorators import login_required 
from django.views.decorators.http import require_POST 

from django.core.urlresolvers import reverse 

from models import Listing, LocationData 

from django.template import RequestContext 

import sys 
import urllib 
if sys.version_info <= (2, 5): 
    import simplejson as json 
else: 
    import json 

import forms 
import sanitize 

from models import RentListing, VacationListing, SaleListing 

from django.forms.models import model_to_dict 
from django.forms.formsets import formset_factory 

from django.core.urlresolvers import reverse 

che, come si può vedere, è solo davvero disordinato, dal momento che solo aggiungere al fondo della lista ogni volta che ho bisogno di qualcosa nel file. Mantenerlo in ordine alfabetico sarebbe ovviamente d'aiuto, ma ci deve essere un modo migliore per generalizzare rispetto a quello che sto facendo ora.

Vale la pena rompere la linea guida dello stile di non utilizzare l'importazione * per motivi di sezioni di importazione più brevi e più manutenibili nel file effettivo?

+0

Suppongo che sia possibile mantenere la lista di importazione breve semplicemente importando 'django', ma ciò comporterebbe solo una quantità ridicola di digitazione e richiamo dalla memoria nel resto del file –

+0

Grande domanda. Potete per favore incollare un esempio di codice concreto? –

risposta

1

Tomasz già accennato una parte interessante della documentazione di Google relativo alle importazioni, ma penso anche this section vale la pena leggere!

4

Hai ragione che è facile ignorare DRY quando si eseguono importazioni di Django o importazioni di python in generale.

È talvolta vantaggioso separare le importazioni comuni per dominio, quindi creare un modulo per la gestione di tali importazioni. Il passo successivo è una delle poche eccezioni che faccio alla mia regola personale di "Non utilizzare import *"


stuff_i_always_use.py

import django.templates as templates 
import tagalog.tagalog_appengine as tagalog 
#etc 

Poi in qualche file:

from stuff_i_aways_use import * 
+0

Sì, è quello che pensavo sarebbe venuto anche a me. La domanda è ancora cosa tenere nel file e cosa togliere per non causare inutili spese generali. –

+1

Questa è la soluzione che ho finito per usare. Invece di importare un bajillion all'inizio di ogni file, li ho scaricati tutti in un unico file imports.py e ho un singolo "from imports import *" nella parte superiore di ogni file. Le guide di stile di google sono utili per mantenere le cose in ordine, ma completamente inutili in termini di DRY. –

Problemi correlati