如何保持Django中的导入整洁?
这看起来可能是个主观的问题,但我相信你们中有些人有很好的方法来确保Django项目中的导入保持可维护。我习惯在每个文件里有大约30个不同的导入,这显然违反了DRY原则。所以这不仅仅是美观的问题,还涉及到不重复代码。
我在寻找一种方法,让Django文件中的导入部分更易管理。对我来说,一个不错的主意是为每种文件类型(比如视图、模型等)准备一个通用的导入文件,然后在文件顶部导入这个通用文件,接着再添加特定于应用的导入。但这样会不会造成很多不必要的负担呢?这些文件应该是什么样的,每种文件类型的重要类又是什么呢?
更新
应要求,这里有一个我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
如你所见,这真的很乱,因为每次我需要在文件中添加东西时,都是把它加到列表的底部。保持字母顺序显然会有帮助,但我现在的做法肯定还有更好的方法来进行概括。
为了让实际文件中的导入部分更短、更易维护,是否值得打破不使用*
导入的风格指南呢?
3 个回答
4
你说得对,在使用Django的导入或者一般的Python导入时,确实很容易忽视DRY原则。
有时候,把常用的导入按功能分开,然后为这些导入创建一个模块是有好处的。接下来的步骤是我个人规则中少数几个例外之一,那就是“不要使用 import *
”。
stuff_i_always_use.py
import django.templates as templates
import tagalog.tagalog_appengine as tagalog
#etc
然后在某个文件中:
from stuff_i_aways_use import *
1
Tomasz已经提到过谷歌文档中关于导入的一些有趣内容,但我觉得这一部分也很值得一读!