Django文件夹结构

Django folder structure

Django 应用程序 (1.7) 中的文件夹的良好结构(最佳实践)是什么? 我不确定将静态数据和文件上传放在哪里。

在我所有的项目中结果都不一样,但目前我有这样的东西(我遗漏了一些明显的folders/files):

project/
   bin/
   include/
    ...   
   src/
     manage.py
     main/
      - settings.py
      - urls.py
     signup/

   static/
      static_/
        + css
        + img
        + js
      static/
      templates/
       - index.html
       - base.html 
       - ...
      uploads/

而且,我更愿意看到 url 之类的东西,例如 site.com/css/file.css 而不是 site.com/static/css/file.css ,但不知怎么的,这比看起来更复杂。怎样才能做到呢?

我在 setting.py 中使用以下内容(目前使用 Django v1.6.8)

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#TEMPLATE_DIRS = (os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "static", "templates"),)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR,  'templates'),)

这给了我一个文件夹布局

project/
    manage.py
    project_app/
        - settings.py
        - urls.py        
    someother_app/
        - admin.py
        - models.py
        - views.py
        static/
            css/
            javascript/
     templates
         admin/
         someother_app/
             - base.html
             - index.html
    media/

我不确定你说 site.com/css/file.css 是什么意思。 base.html<head> 中的 <link rel="stylesheet" href="{{ STATIC_URL }}css/jquery.asmselect.css"> 使用 Django 框架来呈现您的 .css 文件。为什么不使用那里的东西?省时省力。

汤米。

这里推荐书上的Django项目布局Two Scoops of Django:

repo_root/
    .gitignore
    Makefile
    docs/
    README.rst
    requirements.txt
    django_project_root/
        manage.py
        media/
        django_app_root/
        static/
        templates/
        config/
            __init__.py
            settings/
            urls.py
            wsgi.py

并被视为三层项目布局,其中:

  • 顶级 (repo_root):部署所需的高级文件
  • 二级(django_project_root):实际的django项目
  • 第三级(config):django项目配置文件。

关于文件上传,我会将它们从浏览器直接上传到 Amazons S3 文件存储(或类似服务)。否则你会占用带宽和 CPU 时间。或者,如果您必须在媒体文件夹中 ^ 并且出于安全原因,请验证上传的文件类型。