문제

내 (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 문서(위에 링크됨)를 참조하세요.

다른 팁

진자2 통사론 차이점이 거의 없는 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의 템플릿을 사용하려는 특별한 이유가 있나요?둘 다 진자 그리고 겐시 제 생각에는 더 우월하다고 생각합니다.


정말로 원한다면 다음을 참조하세요. Django 문서 settings.py.특히 "설정 없이 설정 사용" 섹션 DJANGO_SETTINGS_MODULE".다음과 같이 사용하십시오.

from django.conf import settings
settings.configure (FOO='bar') # Your settings go here

저도 진자2 추천드려요.이있다 좋은 기사 ~에 djangojinja2 이는 왜 후자를 선호해야 하는지에 대한 자세한 정보를 제공합니다.

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 템플릿 엔진보다 혼자 서다.

이것이 기존 Django 애플리케이션에 대한 외부 플러그라면 다음을 생성할 수 있습니다. 사용자 정의 명령 프로젝트 환경 내에서 템플릿 엔진을 사용하세요.이와 같이;

manage.py generatereports --format=html

하지만 Jinja 대신 Django 템플릿 엔진을 사용하는 것은 가치가 없다고 생각합니다.

도움을 주셔서 감사합니다.여기에 하나 더 추가됩니다.사용자 정의 템플릿 태그를 사용해야 하는 경우입니다.

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

하지 않다.사용 문자열템플릿 대신에 일단 알고 나면 다른 템플릿 엔진을 고려할 이유가 없습니다.

다른 사람이 작성한 것 외에도 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})

장고 오류: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 템플릿 엔진을 사용하는데, 어떻게 작동하는지 살펴보셨나요?아마도 그것을 사용할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top