文档章节

Django的搜索路径与Import机制

小致dad
 小致dad
发布于 2016/07/15 10:29
字数 587
阅读 74
收藏 0

留意到Django的 urls.py 文件:

from django.conf.urls.defaults import *
from PythonProject.views import hello, current_datetime, hours_ahead

urlpatterns = patterns('',
    ('^hello/$', hello),
    ('^time/$', current_datetime),
    (r'^time/plus/(\d{1,2})/$', hours_ahead),
)

留意到这句:

from PythonProject.views import hello, current_datetime, hours_ahead

Python 的 import 机制是怎样的呢?

在 Python 中,每个 py 文件被称之为模块,每个具有 __init__.py 文件的目录被称为包。只要模块或者包所在的目录在 sys.path 中,就可以使用 import 模块或 import 包来使用。 

在这之前,先介绍 Python 搜索路径。

Python 搜索路径

Python 搜索路径 就是使用 import 语句时,Python 所查找的系统目录清单。

举例来说,假定你将 Python 路径设置为 ['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。

如果执行代码 from foo import bar ,Python 将会首先在当前目录查找 foo.py 模块( Python 路径第一项的空字符串表示当前目录)。 如果文件不存在,Python将查找 /usr/lib/python2.4/site-packages/foo.py 文件。

如果你想看Python搜索路径的值,运行Python交互解释器,然后输入:

>>> import sys
>>> print sys.path

通常,你不必关心 Python 搜索路径的设置。 Python 和 Django 会在后台自动帮你处理好。

Import 用法

如果想使用非当前模块中的代码,需要使用Import,这个大家都知道。

如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比如在a.py中使用b.py:

import b

但是如果要import一个不同目录的文件(例如b.py)该怎么做呢?

首先需要使用sys.path.append方法将b.py所在目录加入到搜素目录中。然后进行import即可,例如:

import sys 
sys.path.append('c:\xxxx\b.py') # 这个例子针对 windows 用户来说的 

大多数情况,上面的代码工作的很好。但是如果你没有发现上面代码有什么问题的话,可要注意了,上面的代码有时会找不到模块或者包(ImportError: No module named xxxxxx),这是因为:

sys模块是使用c语言编写的,因此字符串支持 '\n', '\r', '\t'等来表示特殊字符。所以上面代码最好写成:

sys.path.append('c:\\xxx\\b.py') 
# 或者
sys.path.append('c:/xxxx/b.py') 

这样可以避免因为错误的组成转义字符,而造成无效的搜索目录(sys.path)设置。

© 著作权归作者所有

小致dad

小致dad

粉丝 165
博文 543
码字总数 584211
作品 0
济南
技术主管
私信 提问
关于Django项目接入LDAP用户认证

简介 以下内容主要介绍关于Django系统的后台admin管理页面中如何采用LDAP用户认证,并实现登陆的办法 用户认证接入前提 关于Django接入LDAP。首先,你得有一个LDAP系统(http://eric_ldap.osc...

HelloEric
2016/08/15
582
0
ubuntu安装完django失败???

用sudo easy_install django安装的 import django 报错: No module named django python路径:/usr/local/lib/python2.7 django 路径:/usr/local/lib/python2.7/dist-packages/Django-1.5......

渔樵耕读
2013/10/11
773
5
django第一个app,7

通过admin页面更好的管理 分开显示: polls/admin.py from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): admin.site.register(Questi......

NLGBZJ
2018/01/23
0
0
Django+SAE=个人博客 二

以下内容中,所有提到jackerb都是我自己的项目名称,所以需要根据自己的来设定。 参考资料:Django Web开发指南.pdf 2009年5月第1版 现在我们来启用Django的admin功能,并且连接上sae上的mys...

卜星星
2015/10/14
0
0
实战(Chapter2):django实现在线教育平台之数据迁移

上节中我们已经讲解了教育平台项目的需求及数据设计,从本节开始,我们正式编码: 1. 项目创建 在 django搭建虚拟环境-virtualenv 这一篇文章中,我们讲解了mac上如何使用virtualenv的目的及...

fuckCoding
2017/12/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

G1 垃圾收集器介绍-转

https://www.cnblogs.com/ASPNET2008/p/6496481.html

Java搬砖工程师
17分钟前
0
0
超高性能 key-value 数据库 Redis-基础数据结构

Redis的魅力 缓存大致可以分为两类:1.一种是应用内缓存,比如Map(简单的数据结构),以及EH Cache(Java第三方库);2.另一种 就是缓存组件,比如Memached,Redis;Redis(remote dictiona...

须臾之余
28分钟前
3
0
Mysql表分区的选择与实践小结

在一些系统中有时某张表会出现百万或者千万的数据量,尽管其中使用了索引,查询速度也不一定会很快。这时候可能就需要通过分库,分表,分区来解决这些性能瓶颈。 一. 选择合适的解决方法 1....

小谜弟
35分钟前
3
0
为 git 添加多个公秘钥

如果想为主机配置多个git设置,设置多个git公、秘钥,只需在生成密钥时指定密钥保持的文件即可,保证保存密钥的文件不同即可。 示例: ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" -f...

niithub
35分钟前
1
0
walle-web 2.0安装流水

一、环境安装 VMware Workstation,centos7.6 64位,lnmp1.5 二、安装lnmp1.5 wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1......

我心中有猛狗
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部