मैं Django के बाकी हिस्सों के बिना Django टेम्प्लेट का उपयोग कैसे करूं?


101

मैं अपने (पायथन) कोड में Django टेम्पलेट इंजन का उपयोग करना चाहता हूं, लेकिन मैं Django-आधारित वेब साइट का निर्माण नहीं कर रहा हूं। मैं सेटिंग्स (बिना और अन्य) फ़ाइल और डीजेएएनजीओ_सेटिंग्स_मॉडल पर्यावरण चर को सेट किए बिना इसका उपयोग कैसे करूं?

यदि मैं निम्नलिखित कोड चलाता हूं:

>>> 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.

जवाबों:


133

समाधान सरल है। यह वास्तव में अच्छी तरह से प्रलेखित है , लेकिन खोजने में बहुत आसान नहीं है। (मुझे आसपास खुदाई करनी पड़ी - यह तब नहीं आया जब मैंने कुछ अलग 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 प्रलेखन (ऊपर जुड़ा हुआ) देखें (जैसे कि कॉन्फ़िगर करने के लिए कीवर्ड तर्क)।


13
और इसे एक फ़ाइल से प्राप्त करने के लिए: settings.configure (TEMPLATE_DIRS = ("।",)) T = get_template ('test.html')
Bryce

सेटिंग्स के लिए प्रलेखन। कॉन्फ़िगर () यहाँ है - docs.djangoproject.com/en/1.7/topics/settings
स्कॉट

ऊपर "अच्छी तरह से प्रलेखित" लिंक से, यह संस्करण 1.7 तक सच है। 1.8 से शुरू, ऐसा लगता है कि आपको settings.configure()अब और ज़रूरत नहीं है।
ओलाफ डायटशे

यदि आप अन्य टेम्प्लेट शामिल करना चाहते हैं, या टेम्प्लेट इनहेरिटेंस का उपयोग करना चाहते हैं, तो ब्रायस द्वारा उपरोक्त समाधान आवश्यक है।
तितुजन

6
खाका निर्माण से पहले मुझे django.setup () को कॉल करने की आवश्यकता है।
अमित

44

जिंजो 2 सिंटैक्स बहुत कम अंतर के साथ जिंगो के समान है, और आपको बहुत अधिक शक्तिशाली टेम्पलेट इंजन मिलता है, जो आपके टेम्पलेट को बायटेकोड (फास्ट!) के लिए भी संकलित करता है।

मैं इसे टैम्पो के लिए उपयोग करता हूं, जिसमें स्वयं 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'

4
मैं अपने एक प्रोजेक्ट में जिन्जा का उपयोग कर रहा हूं, क्योंकि मैं कुछ ऐसा चाहता था, जिससे मैं काफी परिचित था, लेकिन अपने उपयोगकर्ताओं को नहीं चाहता था (क्योंकि यह एक वितरण योग्य ऐप है) को Django को स्थापित करना होगा। एक प्लस यह है कि जिनजा को आसान_स्थापना के साथ स्थापित किया जा सकता है।
Xiong Chiamiov

4
Django को easy_install के साथ भी इंस्टॉल किया जा सकता है।
hegemon

जिंगा अभी तक आधिकारिक तौर पर अजगर 3 का समर्थन नहीं करता है। साइट के अनुसार, यह अभी भी प्रायोगिक है।
प्रमोद

9

Django के टेम्प्लेट का उपयोग करने का कोई विशेष कारण? जिंजा और गेन्शी दोनों मेरी राय में, श्रेष्ठ हैं।


यदि आप वास्तव में चाहते हैं, तो Django प्रलेखन को देखेंsettings.py । विशेष रूप से अनुभाग "सेटिंग के बिना सेटिंग्स का उपयोग करना DJANGO_SETTINGS_MODULE"। कुछ इस तरह का उपयोग करें:

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

7

मैं jinja2 की भी सिफारिश करूंगा। बनाम एक अच्छा लेख है जो आपको बाद में पहले से बताए जाने के बारे में कुछ विस्तार से जानकारी देता है।djangojinja2


मैं टिब्बा {% set %}टेम्पलेट इंजन (PHP) के लिए वाक्य रचना और समानता के कारण जिंजा 2 को पसंद करता हूं । क्रॉस प्लेटफॉर्म कोड लिखना हमेशा बेहतर होता है, लेकिन प्रदर्शन अंतर महत्वपूर्ण नहीं होता है - उदाहरण के लिए, अजगर हमेशा PHP की तुलना में धीमी गति से काम करेगा , इसलिए यदि आपको प्रदर्शन की आवश्यकता है तो आपको PHP, Twig और Symfony2 के साथ साइट बनाने की आवश्यकता होगी। दुखद लेकिन सच्चाई।
Croll

@ क्रॉल करें, यदि आपकी वेबसाइट जटिल संगणना करती है तो अजगर लाइब्रेरीज़ को अनपेक्षित रूप से तेज़ करता है, अन्यथा अड़चन डेटाबेस है या आप वास्तव में कुछ गलत तरीके से कर रहे हैं
बॉब

4

जिंजा प्रलेखन के अनुसार, पायथन 3 समर्थन अभी भी प्रयोगात्मक है । इसलिए यदि आप पायथन 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"

4

एक अन्य ने जो लिखा उसके अलावा, यदि आप Django> 1.7 पर Django टेम्प्लेट का उपयोग करना चाहते हैं, तो आपको अपनी सेटिंग्स देनी होंगी। कॉन्फ़िगर (...) इस तरह से कॉल करें चर और 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


2

मैं जिन्ना को भी कहूंगा । यह निश्चित रूप से Django Templating Engine की तुलना में अधिक शक्तिशाली है और यह अकेला खड़ा है

यदि यह एक मौजूदा Django एप्लिकेशन के लिए एक बाहरी प्लग था, तो आप एक कस्टम कमांड बना सकते हैं और अपने प्रोजेक्ट वातावरण में टेम्प्लेटिंग इंजन का उपयोग कर सकते हैं। ऐशे ही;

manage.py generatereports --format=html

लेकिन मुझे नहीं लगता कि यह सिर्फ जिंजो के बजाय Django टेम्प्लेटिंग इंजन का उपयोग करने के लायक है।


2

लोगों को मदद के लिए धन्यवाद। यहाँ एक और जोड़ है। वह मामला जहां आपको कस्टम टेम्पलेट टैग का उपयोग करने की आवश्यकता है।

मान लें कि आपके पास मॉड्यूल पढ़ने के लिए यह महत्वपूर्ण टेम्प्लेट है

from django import template

register = template.Library()

@register.filter(name='bracewrap')
def bracewrap(value):
    return "{" + value + "}"

यह html टेम्पलेट फ़ाइल "temp.html" है:

{{var|bracewrap}}

अंत में, यहां एक पायथन स्क्रिप्ट है जो सभी को एक साथ बांधेगी

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}

django.template.base.add_to_builtins("read")ValueErrorमेरे लिए बढ़ा ।
oarfish 13

TemplateDoesNotExistत्रुटि देता हूँ मैं django 1.10.1 का उपयोग कर रहा हूँ
विक्रांत सिंह


1

मत करो। इसके बजाय StringTemplate का उपयोग करें - एक बार जब आप इसके बारे में जानते हैं तो किसी अन्य टेम्पलेट इंजन पर विचार करने का कोई कारण नहीं है।


अजगर बंदरगाह भी जावा की तरह दिखता है। यह पायथोनिक नहीं है।
माइकल बकले

0

मैं उपरोक्त कथनों की प्रतिध्वनि करता हूं। जिनजा 2 सामान्य उपयोग के लिए Django टेम्पलेट्स का एक बहुत अच्छा सुपरसेट है। मुझे लगता है कि वे Django टेम्प्लेट्स को सेटिंग्स थोडा कम युग्मित करने पर काम कर रहे हैं, लेकिन जिन्जा को आपके लिए अच्छा करना चाहिए।


0

manage.pyशेल चलाते समय :

>>> from django import template   
>>> t = template.Template('My name is {{ me }}.')   
>>> c = template.Context({'me': 'ShuJi'})   
>>> t.render(c)

0

Google AppEngineDjango टेम्प्लेटिंग इंजन का उपयोग करता है, क्या आपने यह देखा है कि वे इसे कैसे करते हैं? आप संभवतः बस इसका उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.