(Python) 코드에서 Django 템플릿 엔진을 사용하고 싶지만 Django 기반 웹 사이트를 구축하지 않습니다. settings.py 파일 (및 기타)없이 DJANGO_SETTINGS_MODULE 환경 변수를 설정하지 않고 어떻게 사용합니까?
다음 코드를 실행하면 :
>>> import django.template
>>> from django.template import Template, Context
>>> t = Template('My name is {{ my_name }}.')
나는 얻다:
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
답변
해결책은 간단합니다. 실제로 잘 문서화되어 있습니다. 되어 있지만 찾기가 너무 쉽지는 않습니다. (저는 주위를 파헤쳐 야했습니다. 몇 가지 다른 Google 검색을 시도했을 때 나타나지 않았습니다.)
다음 코드가 작동합니다.
>>> from django.template import Template, Context
>>> from django.conf import settings
>>> settings.configure()
>>> t = Template('My name is {{ my_name }}.')
>>> c = Context({'my_name': 'Daryl Spitzer'})
>>> t.render(c)
u'My name is Daryl Spitzer.'
(구성 할 키워드 인수로) 정의 할 수있는 일부 설정에 대한 설명은 Django 문서 (위에 링크 됨)를 참조하십시오.
답변
Jinja2 구문 은 Django의 구문 과 거의 비슷하지만 차이점이 거의 없으며 템플릿을 바이트 코드로 컴파일하는 (FAST!) 훨씬 더 강력한 템플릿 엔진을 얻을 수 있습니다.
Django 자체를 포함하여 템플릿에 사용하며 매우 좋습니다. 원하는 기능이 누락 된 경우에도 쉽게 확장을 작성할 수 있습니다.
다음은 코드 생성에 대한 몇 가지 데모입니다.
>>> import jinja2
>>> print jinja2.Environment().compile('{% for row in data %}{{ row.name | upper }}{% endfor %}', raw=True)
from __future__ import division
from jinja2.runtime import LoopContext, Context, TemplateReference, Macro, Markup, TemplateRuntimeError, missing, concat, escape, markup_join, unicode_join
name = None
def root(context, environment=environment):
l_data = context.resolve('data')
t_1 = environment.filters['upper']
if 0: yield None
for l_row in l_data:
if 0: yield None
yield unicode(t_1(environment.getattr(l_row, 'name')))
blocks = {}
debug_info = '1=9'
답변
Django의 템플릿을 사용하려는 특별한 이유가 있습니까? Jinja 와 Genshi 는 모두 우월하다고 생각합니다.
정말로 원한다면 Django 문서를settings.py
. 특히 “설정없이 설정 사용”섹션 DJANGO_SETTINGS_MODULE
. 다음과 같이 사용하십시오.
from django.conf import settings
settings.configure (FOO='bar') # Your settings go here
답변
jinja2도 추천합니다. 나중에 선호해야하는 이유에 대한 자세한 정보를 제공 하는 vs. 에 대한 멋진 기사 가 있습니다 .django
jinja2
답변
Jinja 문서에 따르면 Python 3 지원은 아직 실험적 입니다. 따라서 Python 3을 사용 중이고 성능이 문제가되지 않는 경우 django의 기본 제공 템플릿 엔진을 사용할 수 있습니다.
Django 1.8은 템플릿이 초기화되는 방식을 변경해야하는 여러 템플릿 엔진에 대한 지원을 도입했습니다 . settings.DEBUG
django에서 제공하는 기본 템플릿 엔진이 사용하는 것을 명시 적으로 구성해야합니다 . 다음은 django의 나머지 부분을 사용하지 않고 템플릿을 사용하는 코드입니다.
from django.template import Template, Context
from django.template.engine import Engine
from django.conf import settings
settings.configure(DEBUG=False)
template_string = "Hello {{ name }}"
template = Template(template_string, engine=Engine())
context = Context({"name": "world"})
output = template.render(context) #"hello world"
답변
다른 사람이 작성한 것 외에도 Django> 1.7에서 Django 템플릿을 사용하려면 settings.configure (…)에 TEMPLATES 변수를 호출하고 django.setup ()을 다음과 같이 호출해야합니다.
from django.conf import settings
settings.configure(TEMPLATES=[
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['.'], # if you want the templates from a file
'APP_DIRS': False, # we have no apps
},
])
import django
django.setup()
그런 다음 평소처럼 문자열에서 템플릿을로드 할 수 있습니다.
from django import template
t = template.Template('My name is {{ name }}.')
c = template.Context({'name': 'Rob'})
t.render(c)
그리고 디스크에서 .configure에 DIRS 변수를 작성한 경우 :
from django.template.loader import get_template
t = get_template('a.html')
t.render({'name': 5})
Django 오류 : DjangoTemplates 백엔드가 구성되지 않았습니다.
http://django.readthedocs.io/en/latest/releases/1.7.html#standalone-scripts
답변
진자 도 말하고 싶습니다 . Django Templating Engine보다 확실히 더 강력 하며 독립형 입니다.
이것이 기존 Django 응용 프로그램에 대한 외부 플러그인 경우 사용자 지정 명령을 만들고 프로젝트 환경 내에서 템플릿 엔진을 사용할 수 있습니다. 이렇게
manage.py generatereports --format=html
그러나 Jinja 대신 Django Templating Engine을 사용하는 것이 가치가 있다고 생각하지 않습니다.
