Quero usar o mecanismo de modelo Django em meu código (Python), mas não estou construindo um site baseado em Django. Como faço para usá-lo sem ter um arquivo settings.py (e outros) e ter que definir a variável de ambiente DJANGO_SETTINGS_MODULE?
Se eu executar o seguinte código:
>>> import django.template
>>> from django.template import Template, Context
>>> t = Template('My name is {{ my_name }}.')
Eu recebo:
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
python
django
templates
django-templates
template-engine
Daryl Spitzer
fonte
fonte
settings.configure()
mais.A sintaxe do Jinja2 é praticamente a mesma do Django, com poucas diferenças, e você obtém um mecanismo de template muito mais poderoso, que também compila seu template para bytecode (RÁPIDO!).
Eu o uso para modelagem, inclusive no próprio Django, e é muito bom. Você também pode escrever extensões facilmente se algum recurso desejado estiver faltando.
Aqui está uma demonstração da geração de código:
fonte
Alguma razão em particular para usar os templates do Django? Tanto Jinja quanto Genshi são, na minha opinião, superiores.
Se você realmente quiser, consulte a documentação
settings.py
do Django em . Especialmente a seção "Usando configurações sem configuraçãoDJANGO_SETTINGS_MODULE
". Use algo assim:fonte
Eu também recomendaria jinja2. Há um bom artigo sobre
django
vs.jinja2
que fornece algumas informações detalhadas sobre por que você deve preferir o último.fonte
{% set %}
sintaxe e da igualdade do Twig template engine (PHP). É melhor escrever código de plataforma cruzada sempre, mas a diferença de desempenho não é crítica - por exemplo, python sempre funcionará mais devagar do que PHP, então se você precisa de desempenho é melhor criar um site com PHP, Twig e Symfony2 ou outro. Triste, mas é verdade.De acordo com a documentação do Jinja, o suporte ao Python 3 ainda é experimental . Portanto, se você estiver no Python 3 e o desempenho não for um problema, você pode usar o mecanismo de modelo integrado do django.
Django 1.8 introduziu suporte para múltiplos motores de template que requerem uma mudança na forma como os templates são inicializados. Você tem que configurar explicitamente
settings.DEBUG
qual é usado pelo mecanismo de template padrão fornecido pelo django. Aqui está o código para usar modelos sem usar o resto do django.fonte
Além do que outros escreveram, se você quiser usar Django Template no Django> 1.7, você deve fornecer seu settings.configure (...) chame a variável TEMPLATES e chame django.setup () assim:
Então você pode carregar seu modelo normalmente, a partir de uma string:
E se você escreveu a variável DIRS no .configure, do disco:
Erro do Django: nenhum backend DjangoTemplates está configurado
http://django.readthedocs.io/en/latest/releases/1.7.html#standalone-scripts
fonte
Eu diria Jinja também. É definitivamente mais poderoso que o Django Templating Engine e é independente .
Se este fosse um plug externo para um aplicativo Django existente, você poderia criar um comando customizado e usar o mecanismo de modelagem dentro do ambiente de seus projetos. Como isso;
Mas eu não acho que vale a pena usar o Django Templating Engine em vez do Jinja.
fonte
Obrigado pela ajuda pessoal. Aqui está mais uma adição. O caso em que você precisa usar tags de modelo personalizado.
Digamos que você tenha esta importante tag de modelo no módulo read.py
Este é o arquivo de modelo html "temp.html":
Finalmente, aqui está um script Python que se conectará a todos
A saída seria
fonte
django.template.base.add_to_builtins("read")
levanta umValueError
para mim.TemplateDoesNotExist
erro Estou usando django 1.10.1Encontrei isto:
http://snippets.dzone.com/posts/show/3339
fonte
Não. Em vez disso, use StringTemplate - não há razão para considerar qualquer outro mecanismo de modelo uma vez que você saiba sobre ele.
fonte
Eu concordo com as afirmações acima. Jinja 2 é um bom superconjunto de templates Django para uso geral. Acho que eles estão trabalhando para tornar os modelos Django um pouco menos acoplados ao settings.py, mas Jinja deve servir bem para você.
fonte
Durante a execução do
manage.py
shell:fonte
O Google
AppEngine
usa o mecanismo de modelagem Django, você já deu uma olhada em como eles fazem isso? Você poderia simplesmente usar isso.fonte