Django目录结构

经典的源码目录结构

  • 样式一:强调模块化设计
    requirements文件夹:列出项目中需要的依赖文件,比如项目中使用的所有的python包。
    apps、libs文件夹:分离应用文件和库文件
    settings模块
    优势:模块化设计适合规模大的项目
    劣势:没有说明static文件的放置路径
$ tree .
.
├── djangolicious
│   ├── apps
│   │   ├── blog
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   ├── __init__.py
│   │   ├── news
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   └── reader
│   │       ├── __init__.py
│   │       ├── models.py
│   │       ├── tests.py
│   │       └── views.py
│   ├── __init__.py
│   ├── libs
│   │   ├── display
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   ├── __init__.py
│   │   └── management
│   │       ├── __init__.py
│   │       ├── models.py
│   │       ├── tests.py
│   │       └── views.py
│   ├── settings
│   │   ├── common.py
│   │   ├── dev.py
│   │   ├── __init__.py
│   │   ├── prod.py
│   │   └── test.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── requirements
│   ├── common.txt
│   ├── dev.txt
│   ├── prod.txt
│   └── test.txt
└── requirements.txt
directories, 36 files
  • 样式二:大型开源的Django框架项目的
PROJ_NAME/
     __init__.py      这几个文件是django创建project所必须的,不做过多说明
     manage.py
     settings.py
     urls.py  
     apps/               即使是“小”工程,也建议分成多个app,每个app足够简单,只解决某一个方面的问题 (注1)
         myapp1/
        	 tests.py
        	 models.py
        	 templates/
        	 templatetags/
         myapp2/
     extra_apps/     引用的其他app。
     libs/                加载第三方模块,可以避免版本冲突,按照标准的site-packages管理(注2)
           python*.*/  指定python版本号
               site-packages/   
               requirements.pip    #pip的依赖说明文件
     tests/          project级别的测试,对于每个app,还要有自己的测试代码
     static/          静态内容
            css/
            js/
            images/
     uploads/       上传文件所在目录
     templates/    模板目录,覆盖app的模板
            flatpages/
            comments/
            example/
            app1/
            app2/
     templatetags/    tag目录
注1:需要指定static、templates的路径,在在settings.py中设置:
在这里插入图片描述如果’APP_DIRS’: True,则直接在app的目录下寻找templates,这个是默认设置,所以最简单的是直接将templates文件夹放在app下。
‘APP_DIRS’: False,设置为False后,则不会再去app下查找,而是根据DIRS中的路径去进行查找.。在这里插入图片描述 虽然staic_url指定的路径,但并不知道根目录在哪里,所以需要通过staticfiles_dirs这个django变量来设置
我的Django目录

在这里插入图片描述
移动之后,还不可以直接使用。需要再改写东西才行。主要修改是的import引用的路径。例如之前的:

from blog.models import Blog

改成如下:

from apps_project.blog.models import Blog

就是把之前所有app的应用加上apps_projet:
除了该这个地方之后,也不要忘记修改urls.py文件和settings.py文件的应用,同样在前面加上apps_project,如:blog应用的urls.pysettings.py 原本的INSTALLED_APPS设置:可以修改成如下:

#coding:utf-8
from django.conf.urls import include, url
 
urlpatterns = [
    url(r'^$', 'apps_project.blog.views.index', name='blog_list'),
    url(r'^(?P<id>\d+)$', 'apps_project.blog.views.blog_show', name='detailblog'),
    #...
]

INSTALLED_APPS = (
    'apps_project.blog',
    #...其他应用
)

注1:若在setting中的staticfiles_dirs中加入apps_projects配置: os.path.join(BASE_DIR, ‘apps_project’)) 就可以直接用:from blog.models import Blog

django配置静态文件

配置静态文件的两种方式:

  • 配置单独app下的静态文件,比如某个app下的单独的图片
  • 配置整个project下的静态文件,适用于那些和单独app关联不大的文件,比如jquery bootstrap 等等

配置步骤:

  • 首先,我们需要确认在settings.py文件中的INSTALLED_APPS变量中存在 django.contrib.staticfiles
    INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', )

  • 如果我们要配置单独app下的静态文件的话,执行此步骤。
    在settings.py文件中定义 STATIC_URL 变量。
    STATIC_URL = ‘/static/’

  • 如果我们要配置整个project下的静态文件的话,执行此步骤。
    在settings.py文件中定义 STATICFILES_DIRS 变量。
    STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), # 首选project静态文件搜寻路径 '/var/www/static/', # 第二选project静态文件搜寻路径,还可以有第三选,第四选…… )

  • 如果我们要配置整个project下的静态文件的话,执行此步骤。我们需要在整个project 中建立一个 名为static的文件夹

  • 当我们在模板中无论是使用硬链接 /static/myexample.jpg 还是使用 static 标签 <img src="{% static “myexample.jpg” %}" /> 都会先访问app下的static/文件夹下的myexample.jpg 文件,若app下的static文件夹中没有该文件,则访问project中的static/文件夹,查看是否有myexample.jpg文件,若有则返回,若没有则去/var/www/static/中寻找。

  • 注:静态文件的设置需要看BASE_DIR的值来具体根据上述方法来设置。

第三方应用本地化

创建一个package叫apps_third_party。
从python系统目录中找到django_comments整个应用的文件夹。一般在python安装目录下的lib/site-packages/django_contrib_comments-1.7.0.dev1-py2.7.egg中(1.7是django_comments版本号,py2.7是python版本号)

在这里插入图片描述
接下来同样需要修改一下django_comments的引用路径。修改之后统计,一共有4种地方需要修改:

1)from django_comments. 全部替换成 from apps_third_party.django_comments.

2)import django_commments 全部替换成 from apps_third_party import django_comments

3)urls设置include(‘django_comments.urls’) 改成 include(‘apps_third_party.django_comments.urls’)

4)settings.py引用 django_comments 改成 apps_third_party.django_comments

settings.py 的简单优化

主要是针对INSTALLED_APPS设置。现在设置如下:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'apps_third_party.django_comments',
    'apps_project.blog',
    'apps_project.tools',
    'apps_project.tutorial',
    'apps_project.user_ex',
    'apps_project.oauth',
    'apps_project.view_record',
)

比较多,不清晰明了,现改成:

#先决应用
PREREQ_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
]
 
#项目应用
PROJECT_APPS = [
    'apps_project.blog',
    'apps_project.tools',
    'apps_project.tutorial',
    'apps_project.user_ex',
    'apps_project.oauth',
    'apps_project.view_record',
]
 
#第三方应用
THIRD_PARTY_APPS = [
    'apps_third_party.django_comments',
]
 
INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS + THIRD_PARTY_APPS

参考文章
https://www.cnblogs.com/codemyzen/p/3678787.html
http://yshblog.com/blog/65
https://www.cnblogs.com/MnCu8261/p/6013557.html

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值