2011-01-21 18 views
10

Esto podría parecer una pregunta subjetiva, pero estoy seguro de que hay buenas técnicas que algunos de ustedes emplean para garantizar que las importaciones en los proyectos de Django se mantengan factibles. Estoy acostumbrado a tener una lista de aproximadamente 30 importaciones diferentes en cada archivo, y eso claramente viola el principio DRY. Entonces, no solo se trata de estética, también se trata de no duplicar el código.¿Cómo mantener las importaciones ordenadas en Django?

Estoy buscando un método que mantenga manejables las secciones de importación en los archivos de Django. Lo que me parece una buena idea es tener un archivo genérico de importación para cada tipo de archivo (vistas, modelos, etc.), que luego se importa en la parte superior, con más importaciones específicas de la aplicación después de eso. Pero, ¿eso causaría una gran cantidad de gastos indirectos innecesarios? ¿Cómo deberían verse esos archivos y cuáles son las clases importantes para cada tipo de archivo?

actualización

A petición, aquí es un ejemplo de uno de mis views.py archivos.

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 

que, como se puede ver, es realmente complicado, ya que acabo de añadir a la parte inferior de la lista cada vez que necesito algo en el archivo. Mantenerlo en orden alfabético obviamente ayudaría, pero tiene que haber una forma mejor de generalizar que lo que estoy haciendo ahora.

¿Vale la pena romper la pauta de estilo de no usar la importación * por el bien de secciones de importación más cortas y más mantenibles en el archivo real?

+0

Supongo que es posible mantener la lista de importación corta importando 'django', pero eso solo daría lugar a una cantidad ridícula de tipeo y recuperación de memoria en el resto del archivo –

+0

Una gran pregunta. ¿Puedes pegar un ejemplo de código concreto? –

Respuesta

1

Tomasz ya se ha mencionado una parte interesante de la documentación de Google respecto a las importaciones, pero creo que también es this section vale la pena leer!

4

Tiene razón en que es fácil ignorar DRY cuando se trabaja con importaciones de Django, o con importaciones de Python en general.

A veces es beneficioso separar las importaciones comunes por dominio, luego crear un módulo para administrar esas importaciones. El siguiente paso es una de las pocas excepciones que hago a mi regla personal de "No utilizar import *"


stuff_i_always_use.py

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

Luego, en algún archivo:

from stuff_i_aways_use import * 
+0

Sí, eso es lo que pensé que se trataría también. La pregunta todavía es qué guardar en el archivo y qué sacar para no causar gastos indirectos innecesarios. –

+1

Esta es la solución que terminé usando. En lugar de tener un bajillion importado en la parte superior de cada archivo, los volqué a todos en un único archivo imports.py y tengo un solo "de import import *" en la parte superior de cada archivo. Las guías de estilo de google son útiles para mantener las cosas ordenadas, pero completamente inútiles en términos de DRY. –

Cuestiones relacionadas