我是Django的新手并开始一个项目,我想以正确的方式做到这一点.
我想知道您认为组织项目的最佳做法.
以下是我的一些问题:
>如何将静态资源与Python代码分开,以便我不会浪费时间通过Django处理静态内容?
>由于应用程序是可重用的模块,它们对项目来说并不紧张,所以它们应该位于项目目录中,还是位于包含所有“自制”应用程序的另一个目录中?
>模板是否被视为静态或动态内容?
这是我当前的文件层次结构:
webapps/ myproject/ apache/ bin/ lib/ templates/ app1/ app2/ src/ app1/ app2/ __init.py settings.py urls.py manage.py myproject.wsgi admin/ static/ css/ img/
你怎么看?
什么会更好?
谢谢!
解决方法@H_502_21@
您的目录结构还可能取决于您正在使用的django版本.如果您使用的是django 1.3,则处理静态内容会略有改变.您的模板也可以单独安排.
以下仅适用于django 1.3.
在app目录中:
...
app1/
static/
app1/
templates/
app1/
models.py
...
views.py
如果您使用新的django.contrib.staticfiles应用程序,您的设置可能如下所示:
MEDIA_ROOT = path.join(ROOT_PATH,'uploaded_media/')
MEDIA_URL = '/uploaded_media/'
# static content is collected here,and served from here,but don't add stuff manually here! add to staticfiles_dirs
STATIC_ROOT = path.join(ROOT_PATH,'collected_static/')
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
path.join(ROOT_PATH,'src/extra_static/'),)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder','django.contrib.staticfiles.finders.AppDirectoriesFinder',)
同样,您的模板可以直接从INSTALLED_APP加载:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader','django.template.loaders.app_directories.Loader'
)
TEMPLATE_DIRS = (
path.join(ROOT_PATH,'src/templates/'),)
上述两种策略意味着模板和静态内容可以存在于其特定的应用程序目录中.在开发中,使用contrib.staticfiles,可以直接从应用程序文件夹中提供静态内容.在生产中,有一个管理命令可以将所有应用程序目录静态内容收集到/ path / to / project / gather_static /,您可以将Web服务器指向该目录以提供静态内容.
对于预打包的库,使用virtualenv和pip是一个好主意.否则,我喜欢将库保存在项目根目录下的lib目录中.它使得引用源,模板和静态内容非常方便,而不是安装到站点包(特别是在不使用virtualenv时).
因此,重新安排您的项目结构:
webapps/
myproject/
apache/
bin/
lib/
collected_static/
uploaded_media/
myproject.wsgi
src/
templates/ # lib template overrides and site wide templates
base.html
lib_1/
nav.html
extra_static/
lib_1/ # libs that dont support django 1.3 static
js/
css/
settings.py
settingslocal.py # keep developer specific settings here
urls.py
manage.py
app1/
__init.py
static/
app1/
js/
css/
templates/
app1/
以下仅适用于django 1.3.
在app目录中:
... app1/ static/ app1/ templates/ app1/ models.py ... views.py
如果您使用新的django.contrib.staticfiles应用程序,您的设置可能如下所示:
MEDIA_ROOT = path.join(ROOT_PATH,'uploaded_media/') MEDIA_URL = '/uploaded_media/' # static content is collected here,and served from here,but don't add stuff manually here! add to staticfiles_dirs STATIC_ROOT = path.join(ROOT_PATH,'collected_static/') ADMIN_MEDIA_PREFIX = '/static/admin/' STATIC_URL = '/static/' # Additional locations of static files STATICFILES_DIRS = ( path.join(ROOT_PATH,'src/extra_static/'),) STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder','django.contrib.staticfiles.finders.AppDirectoriesFinder',)
同样,您的模板可以直接从INSTALLED_APP加载:
TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader','django.template.loaders.app_directories.Loader' ) TEMPLATE_DIRS = ( path.join(ROOT_PATH,'src/templates/'),)
上述两种策略意味着模板和静态内容可以存在于其特定的应用程序目录中.在开发中,使用contrib.staticfiles,可以直接从应用程序文件夹中提供静态内容.在生产中,有一个管理命令可以将所有应用程序目录静态内容收集到/ path / to / project / gather_static /,您可以将Web服务器指向该目录以提供静态内容.
对于预打包的库,使用virtualenv和pip是一个好主意.否则,我喜欢将库保存在项目根目录下的lib目录中.它使得引用源,模板和静态内容非常方便,而不是安装到站点包(特别是在不使用virtualenv时).
因此,重新安排您的项目结构:
webapps/ myproject/ apache/ bin/ lib/ collected_static/ uploaded_media/ myproject.wsgi src/ templates/ # lib template overrides and site wide templates base.html lib_1/ nav.html extra_static/ lib_1/ # libs that dont support django 1.3 static js/ css/ settings.py settingslocal.py # keep developer specific settings here urls.py manage.py app1/ __init.py static/ app1/ js/ css/ templates/ app1/