Py学习  »  Django

如何从模板创建Django项目

Python程序员 • 6 年前 • 600 次点击  

当默认的Django项目格式不再满足要求时,Django项目模板便是自然的解决方案。在本教程中学习如何创建自己的Django项目模板吧。




什么是Django项目模板?


Django的一个相当模糊的特性是能够从模板,即自定义的目录结构,开始安装Django项目。


当默认的项目格式不再满足要求时(相信我,这不是在你希望在生产环境中部署时才会出现的情况),或者当你需要对许多Django项目重复相同的配置时,这一特性就很方便了。


Django项目模板只不过是一个预先定义的带有自定义目录结构的项目,你可以在几分钟内为自己创建一个模板。


一个比较流行的Django模板的例子是django-cookiecutter。它具有广泛的特性和配置,可以用于绝对可靠的生产部署,几乎可用于任何新的Django项目。


然而,django-cookiecutter有时候会很复杂,尤其是对于初学者来说,一个更简单的Django模板可以帮助你在使用django -cookiecutter之前掌握一些基础知识。


在下一节中,你将学习如何构建自己的模板。


如何创建自己的Django项目模板


首先,在选择的文件夹中创建一个Python虚拟环境并安装Django(请注意,它们是四个独立的命令):



然后使用以下命令创建一个新的Django项目:



注意一下项目名称:它应该是project_name。一旦完成,在编辑器中打开该项目。


(注意,在本例中,我对外部文件夹使用了project-name,而对项目名称使用了project_name)。


现在你应该遍历项目中的每个文件,并将出现的每个project_name替换为{{ project_name }}(一个sed一行程序就可以做到)。


你需要调整的文件有:


  • manage.py

  • settings.py

  • wsgi.py

  • asgi.py


你可能已经猜到{{project_name}}是一个占位符变量。例如,在 manage.py中,你会将以下内容:



更改为这样:



在wsgi.py中将以下内容:



更改为这样:



等等。


此外,你可能还希望调整你希望的任何配置,或者更好的做法是将Django设置分割到单独的文件中,以用于开发、测试和生产。你可以在这里看到一个例子。(地址:https://github.com/valentinogagliardi/ponee/tree/master/project_name/settings  )


在进入下一节之前,不要忘记从模板项目中删除虚拟环境。


如何从你的模板创建Django项目


模板项目就绪后,在一个不同的文件夹中创建一个新的Python虚拟环境,并安装Django:



现在,我们将传递--template标志来从我们的模板中安装,而不是像以前那样运行django-admin startproject。假设你在你的主目录~/project-name中创建了模板,你应该运行:



这个命令将从模板开始创建你的新的Django项目。


(注意,在本例中,我使用了new-django-project作为外部文件夹名称,使用new_django_project作为项目名称)。


现在,就很方便了,你可能在想是否有一种方法可以使用远程模板,比如从Github 仓库。是的,你可以!


如何从远程模板创建Django项目


startproject的--template标记也可以接受一个URL作为远程源。这意味着你可以像这样从一个远程模板安装Django项目:



福利:模板化所有东西


除了模板化Django的相关文件之外,你还可以对项目中的任何其他文件执行相同的操作。


假设你想要部署到Heroku,这里就需要一个Procfile。你需要通过模板化系统传递Procfile,以便将{{project_name}}替换为实际的项目名称,你可以使用--name标志运行startproject:



确保在Procfile中有一个project_name的占位符:



资源


要获得稍微复杂的Django模板,请参阅ponee,它是一个轻量级的Django模板,可以用于Heroku。

(地址:https://github.com/valentinogagliardi/ponee  )


英文原文:https://www.valentinog.com/blog/django-project/ 
译者:Nothing

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54429