나머지 Django없이 Django 템플릿을 어떻게 사용합니까?
(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도 추천합니다. 나중에 선호해야하는 이유에 대한 자세한 정보를 제공 하는 대 에 대한 멋진 기사 가 있습니다 .djangojinja2
Jinja 문서에 따르면 Python 3 지원은 아직 실험적 입니다. 따라서 Python 3를 사용하는 중이고 성능이 문제가되지 않는 경우 django의 기본 제공 템플릿 엔진을 사용할 수 있습니다.
Django 1.8은 템플릿이 초기화되는 방식을 변경해야하는 여러 템플릿 엔진에 대한 지원을 도입했습니다 . settings.DEBUGdjango에서 제공하는 기본 템플릿 엔진이 사용하는 것을 명시 적으로 구성해야합니다 . 다음은 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 Templating Engine보다 확실히 더 강력 하며 독립형 입니다.
이것이 기존 Django 응용 프로그램에 대한 외부 플러그인 경우 사용자 지정 명령을 만들고 프로젝트 환경 내에서 템플릿 엔진을 사용할 수 있습니다. 이렇게
manage.py generatereports --format=html
그러나 Jinja 대신 Django Templating Engine을 사용하는 것이 가치가 있다고 생각하지 않습니다.
도움을 주셔서 감사합니다. 여기에 하나 더 추가되었습니다. 사용자 지정 템플릿 태그를 사용해야하는 경우.
read.py 모듈에이 중요한 템플릿 태그가 있다고 가정 해 보겠습니다.
from django import template
register = template.Library()
@register.filter(name='bracewrap')
def bracewrap(value):
return "{" + value + "}"
다음은 html 템플릿 파일 "temp.html"입니다.
{{var|bracewrap}}
마지막으로, 여기에 모두 함께 연결되는 Python 스크립트가 있습니다.
import django
from django.conf import settings
from django.template import Template, Context
import os
#load your tags
from django.template.loader import get_template
django.template.base.add_to_builtins("read")
# You need to configure Django a bit
settings.configure(
TEMPLATE_DIRS=(os.path.dirname(os.path.realpath(__file__)), ),
)
#or it could be in python
#t = Template('My name is {{ my_name }}.')
c = Context({'var': 'stackoverflow.com rox'})
template = get_template("temp.html")
# Prepare context ....
print template.render(c)
출력은
{stackoverflow.com rox}
발견 :
http://snippets.dzone.com/posts/show/3339
하지마. 대신 StringTemplate 을 사용하십시오 . 일단 알고 있으면 다른 템플릿 엔진을 고려할 이유가 없습니다.
다른 사람이 작성한 것 외에도 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
나는 위의 진술을 반영합니다. Jinja 2는 일반적으로 사용되는 Django 템플릿의 훌륭한 수퍼 세트입니다. 나는 그들이 Django 템플릿을 settings.py와 조금 덜 결합시키는 작업을하고 있다고 생각하지만, Jinja는 당신을 위해 잘 할 것입니다.
manage.py셸을 실행 하는 동안 :
>>> from django import template
>>> t = template.Template('My name is {{ me }}.')
>>> c = template.Context({'me': 'ShuJi'})
>>> t.render(c)
Google AppEngine은 Django 템플릿 엔진을 사용합니다. 어떻게 작동하는지 보셨나요? 당신은 아마도 그것을 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/98135/how-do-i-use-django-templates-without-the-rest-of-django
'IT' 카테고리의 다른 글
| Vim에서 검색 줄에 텍스트를 넣는 방법이 있습니까? (0) | 2020.08.20 |
|---|---|
| 객체를 실제 유형으로 캐스팅하는 방법은 무엇입니까? (0) | 2020.08.20 |
| 파일을 사용하여 파일의 디렉토리를 어떻게 얻습니까? (0) | 2020.08.20 |
| Runtime.exec ()에서 파이프를 작동시키는 방법은 무엇입니까? (0) | 2020.08.20 |
| HashMap 및 int를 키로 (0) | 2020.08.20 |