如何在Django中保持进口整洁?

时间:2011-01-21 20:17:53

标签: python 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 个答案:

答案 0 :(得分: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 :(得分:2)

您还可以查看他们在Google上的表现:

http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Imports

答案 2 :(得分:1)

Tomasz已经提到谷歌关于进口的文档中有一个有趣的部分,但我认为this section也值得一读!