Django文件夹结构

时间:2015-01-25 18:46:26

标签: django django-staticfiles django-1.7

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

在我的所有项目中,结果都不同,但目前我有类似的东西(我遗漏了一些明显的文件夹/文件):

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

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

此外,我更愿意看到网址类似于site.com/css/file.css而不是site.com/static/css/file.css,但不知何故,这似乎更复杂。怎么能实现呢?

2 个答案:

答案 0 :(得分:2)

我在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时,我不确定你的意思。 <link rel="stylesheet" href="{{ STATIC_URL }}css/jquery.asmselect.css"> <head>base.html之类的内容使用Django框架来显示.css文件。为什么不用那里有什么?节省时间和精力。

托米。

答案 1 :(得分:1)

以下是对书籍Two Scoops of Django

中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时间。或者如果您必须在媒体文件夹中^并出于安全原因请验证上传的文件类型。