Qual é o melhor local para colocar modelos no projeto django?
88
Do livro Django, capítulo 4 :
Se você não consegue pensar em um lugar óbvio para colocar seus modelos, recomendamos a criação de um diretório de modelos dentro do seu projeto Django (ou seja, dentro do diretório meusite que você criou no Capítulo 2, se tiver seguido nossos exemplos).
Isso é exatamente o que eu faço e funcionou muito bem para mim.
Minha estrutura de diretório é semelhante a esta:
/media
para todos os meus CSS / JS / imagens etc
/templates
para meus modelos
/projectname
para o código do projeto principal (ou seja, o código Python)
Colocado
<PROJECT>/<APP>/templates/<APP>/template.html
para modelos específicos de aplicativos para ajudar a tornar o aplicativo reutilizável em outro lugar.Para modelos "globais" gerais, eu os coloco em
<PROJECT>/templates/template.html
fonte
<APP>
segundos<PROJECT>/<APP>/templates/<APP>/template.html
?TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"))
TEMPLATE_DIRS
agora está obsoleto - você deve adicionarDIRS=[os.path.join(BASE_DIR, "templates")]
aTEMPLATES
- consulte stackoverflow.com/questions/29725132/…Seguindo de Dominic e dlrust,
Usamos uma distribuição de fonte setuptools (sdist) para empacotar nosso projeto django e aplicativos para implantar em nossos diferentes ambientes.
Descobrimos que os modelos e arquivos estáticos precisam estar nos diretórios do aplicativo django para que possam ser empacotados por ferramentas de instalação.
Por exemplo, nosso modelo e caminhos estáticos se parecem com:
Para que isso funcione, o MANIFEST.in precisa ser modificado (consulte http://docs.python.org/distutils/sourcedist.html#the-manifest-in-template )
Um exemplo de MANIFEST.in:
Além disso, você precisa confirmar no arquivo de configurações do django que o carregador app_directories está em seu TEMPLATE_LOADERS. Acho que está lá por padrão no Django 1.4.
Um exemplo dos carregadores de modelo de configurações django:
Caso você esteja se perguntando por que usamos sdists em vez de apenas arquivos rsync; faz parte de nosso fluxo de trabalho de gerenciamento de configuração, onde temos um único tarball de construção que é implantado com PIP inalterado em ambientes de teste, aceitação e produção.
fonte
/static/
em seu plano de layout ao pensar em modelos e aplicativos modulares. Você pode mencionar outra prática recomendada, colocarcss
arquivos em uma pasta chamada dastatic/app/css
mesma forma parajs
e talvezjpg
ou apenas/static/app/images
.DJANGO 1.11
adicione a pasta de modelos onde o manage.py existe, que é seu diretório base. altere os DIRS para MODELOS conforme a seguir em settings.py
]
Agora, para usar o modelo usando o código,
em views.py. isso funciona perfeitamente bem para Django 1.11
fonte
Esta é mais uma escolha pessoal no nível do projeto. Se você está falando sobre aplicativos que precisam ser plugáveis, um diretório de modelos em seu aplicativo é o lugar onde eles se tornam padrão. Mas em todo o projeto, é o que funciona melhor para você.
fonte
Eu entendi que
TEMPLATE_DIRS
requer um caminho absoluto. E eu não gosto de caminhos absolutos no meu código. Então, isso está funcionando bem para mim, emsettings.py
:fonte
BASE_DIR
, então você pode simplificar isso para:os.path.join(BASE_DIR, '../APPNAME/templates')
Django 1.10
TEMPLATE_DIRS
está obsoleto.Agora precisamos usar
TEMPLATE
, apresentando o Django 1.8 assim:Sobre a melhor localização, Django procurando por um modelo como este:
Mais informações: https://docs.djangoproject.com/en/1.10/topics/templates/#configuration
fonte
A solução anterior não funcionou no meu caso. Eu usei:
fonte
TEMPLATE_DIRS
está obsoleto agora.BASE_DIR
, então você pode simplificar isso para:os.path.join(BASE_DIR, '../myapp/templates')
Você também pode considerar ter seus templates em um banco de dados, usando django-dbtemplates . Ele também é configurado para armazenamento em cache e o aplicativo django-reversion que o ajuda a manter versões antigas de seus modelos.
Funciona muito bem, mas eu prefiro um pouco mais de flexibilidade na importação / sincronização de / para o sistema de arquivos.
[editar: 20 de agosto de 2018 - este repositório não está disponível, um com o mesmo nome está disponível em https://github.com/jazzband/django-dbtemplates e foi atualizado 8 meses atrás. Eu não uso mais o Django de forma significativa, então não posso garantir isso.]
fonte