Minha máquina local está executando o Python 2.5 e o Nginx no Ubuntu 8.10, com o Django construído a partir do tronco de desenvolvimento mais recente.
Para cada URL que eu solicitar, ele lança:
TemplateDoesNotExist em / appname / path appname / template_name.html
O Django tentou carregar esses modelos, nesta ordem: * Usando o carregador django.template.loaders.filesystem.function: * Usando o carregador django.template.loaders.app_directories.function:
TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates',)
Ele está procurando /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html neste caso? O estranho é que esse arquivo existe no disco. Por que o Django não pode localizá-lo?
Eu executo o mesmo aplicativo em um servidor remoto com Python 2.6 no Ubuntu 9.04 sem esse problema. Outras configurações são as mesmas.
Existe algo mal configurado na minha máquina local ou o que poderia ter causado esses erros nos quais eu deveria procurar?
No meu settings.py , especifiquei:
SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
Ele deve procurar os seguintes arquivos:
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html
- ...
Todos os arquivos acima existem no disco.
Resolvido
Funciona agora depois que eu tentei:
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
É estranho. Não preciso fazer isso no servidor remoto para fazê-lo funcionar.
Respostas:
Primeira solução :
Essas configurações
significa que o Django examinará os modelos do
templates/
diretório em seu projeto.Supondo que seu projeto Django esteja localizado em
/usr/lib/python2.5/site-packages/projectname/
seguida, com suas configurações, o django procurará os modelos em/usr/lib/python2.5/site-packages/projectname/templates/
Portanto, nesse caso, queremos mover nossos modelos para que sejam estruturados assim:
Segunda solução :
Se isso ainda não funcionar e supondo que você tenha os aplicativos configurados em settings.py assim:
Por padrão, o Django carregará os modelos no
templates/
diretório em todos os aplicativos instalados. Portanto, com sua estrutura de diretórios, queremos mover nossos modelos para ficar assim:SETTINGS_PATH
pode não ser definido por padrão. Nesse caso, você desejará defini-lo (em settings.py):fonte
/usr/lib/python2.5/site-packages/projectname/
?templates
não é um bom design. Mas, como eu sei, depois de adicionar o seuAPP_NAME
nosettings.py
,django
pode procurar o modelo do aplicativo no diretório que está no diretórioAPP_DIR
. Assim, você pode separar o modelo para vários aplicativos. (Django 1.7 - .1.9Encontre esta tupla:
Você precisa adicionar a 'DIRS' a string
Então, no total, você precisa:
fonte
SETTINGS_PATH
não está realmente definido em lugar algum, então não acho que essa resposta funcione. Talvez você quis dizerBASE_DIR
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
, não arquivoSe você encontrar esse problema ao adicionar um
app
do zero. Provavelmente é porque você sente falta de algunssettings
. Três etapas são necessárias ao adicionar umapp
.1 、 Crie o diretório e o arquivo de modelo.
Suponha que você tenha um projeto nomeado
mysite
e deseje adicionar umapp
nomeyour_app_name
. Coloque seu arquivo de modelo damysite/your_app_name/templates/your_app_name
seguinte maneira.2 、 Adicione
app
ao seuINSTALLED_APPS
.Modificar
settings.py
3 、 Adicione seu
app
diretório aoDIRS
inTEMPLATES
.Modificar
settings.py
.fonte
Na configuração .py remova TEMPLATE_LOADERS e TEMPLATE DIRS e depois ADICIONE
fonte
Eu tive um problema embaraçoso ...
Recebi esse erro porque estava correndo e esqueci de colocar o aplicativo
INSTALLED_APPS
. Você pensaria que o Django geraria um erro mais descritivo.fonte
Apenas um palpite, mas confira este artigo sobre o carregamento de modelos do Django . Em particular, verifique se você está
django.template.loaders.app_directories.Loader
na sua lista TEMPLATE_LOADERS.fonte
Verifique as permissões nos modelos e nos diretórios appname, com ls -l ou tente fazer um caminho absoluto open () no django.
fonte
Funciona agora depois que eu tentei
É estranho. Eu não preciso fazer isso no servidor remoto para fazê-lo funcionar.
Além disso, eu tenho que executar o seguinte comando na máquina local para tornar todos os arquivos estáticos acessíveis, mas no servidor remoto todos eles são "root: root".
A máquina local é executada no Ubuntu 8.04 desktop edition. O servidor remoto está no Ubuntu 9.04 server edition.
Alguém sabe por que?
fonte
Para a versão 1.9 do django, adicionei
linha para o bloco Modelos em settings.py E funcionou bem
fonte
TemplateDoesNotExist
Erro no Django significa simplesmente que o framework não consegue encontrar o arquivo de modelo.Para usar a API de carregamento de modelos, você precisará informar a estrutura em que armazena seus modelos. O local para fazer isso está no seu arquivo de configurações (
settings.py
),TEMPLATE_DIRS
definindo. Por padrão, é uma tupla vazia, então essa configuração informa ao mecanismo de carregamento de modelos do Django onde procurar por modelos.Escolha um diretório onde você deseja armazenar seus modelos e adicione-o a TEMPLATE_DIRS, por exemplo:
fonte
Veja em qual pasta o django tenta carregar o modelo
Template-loader postmortem
visualizado na página de erro, por exemplo, o erro parecerá assim:No meu erro
vcsrc\vcsrc\templates\base.html
não no caminho.Em seguida, mude
TEMPLATES
emsetting.py
arquivo para o seu caminho de modelosfonte
Devo usar modelos para um aplicativo interno e funciona para mim:
fonte
Certifique-se de que você adicionou seu aplicativo para o
project-name/app-namme/settings.py
INSTALLED_APPS: .E no
project-name/app-namme/settings.py
MODELOS: .fonte
Verifique se o seu templates.html está no
/usr/lib/python2.5/site-packages/projectname/templates
diretóriofonte
Olá pessoal, encontrei uma nova solução. Na verdade, ele está definido em outro modelo. Portanto, em vez de definir TEMPLATE_DIRS, coloque o nome do caminho do diretório como:
fonte
Tenho vergonha de admitir isso, mas o problema para mim era que um modelo havia sido especificado como em
….hml
vez de….html
. Cuidado!fonte
Eu adicionei isso
e ainda mostrava o erro, então percebi que em outro projeto os modelos estavam sendo exibidos sem adicionar esse código no arquivo settings.py, então verifiquei o projeto e percebi que não havia criado um ambiente virtual nesse projeto.
e funcionou, não sei porque
fonte
Eu vim com esse problema. Aqui está como eu resolvi isso:
Veja o seu settings.py, localize a
TEMPLATES
variável, dentro de TEMPLATES, adicione o caminho dos seus modelos dentro daDIRS
lista. Para mim, primeiro defino o caminho dos meus modelos comoTEMPLATES_PATH = os.path.join(BASE_DIR,'templates')
e depois adicionoTEMPLATES_PATH
àDIRS
lista'DIRS':[TEMPLATES_PATH,]
,. Em seguida, reinicie o servidor, a exceção TemplateDoesNotExist se foi. É isso aí.fonte
no seu
setting.py
arquivo substituaDIRS
naTEMPLATES
matriz por estepara isso
mas acho que você precisa saber é que você precisa criar uma pasta com o nome
templates
e ela deve estar no caminho raiz, caso contrário você precisará alterar oDIRS
valorfonte
1. crie uma pasta 'templates' no seu 'app' (digamos que você o nomeou como app) e você pode colocar o arquivo html aqui. Mas é altamente recomendável criar uma pasta com o mesmo nome ('app') na pasta 'templates' e só então colocar htmls lá. Na pasta 'app / templates / app'
2. agora em urls.py de 'app' coloque:
3. em views.py de 'app':
fonte