如何保持Django中的导入整洁?

10 投票
3 回答
842 浏览
提问于 2025-04-16 10:24

这看起来可能是个主观的问题,但我相信你们中有些人有很好的方法来确保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 个回答

2
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已经提到过谷歌文档中关于导入的一些有趣内容,但我觉得这一部分也很值得一读!

撰写回答