বাকী জ্যাঙ্গো ছাড়া কীভাবে আমি জ্যাঙ্গো টেমপ্লেট ব্যবহার করব?


101

আমি আমার (পাইথন) কোডে জ্যাঙ্গো টেম্পলেট ইঞ্জিনটি ব্যবহার করতে চাই, তবে আমি জ্যাঙ্গো-ভিত্তিক ওয়েব সাইট তৈরি করছি না। সেটিংস.পি ফাইল (এবং অন্যদের) না রেখে এবং ডিজেঙ্গো_এসটিটিঙ্গস_মুডুয়াল পরিবেশ পরিবর্তনশীল সেট না করে আমি কীভাবে এটি ব্যবহার করব?

যদি আমি নিম্নলিখিত কোডটি চালাই:

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

সমাধান সহজ। এটি আসলে ভাল নথিভুক্ত , তবে এটি খুঁজে পাওয়া খুব সহজ নয়। (আমাকে প্রায় খনন করতে হয়েছিল - আমি কয়েকটি গুগল অনুসন্ধানের চেষ্টা করেছিলাম না।)

নিম্নলিখিত কোডটি কাজ করে:

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

আপনি সংজ্ঞায়িত করতে পারেন এমন কিছু সেটিংসের বর্ণনা (কনফিগার করার জন্য কীওয়ার্ড আর্গুমেন্ট হিসাবে) জাজানো ডকুমেন্টেশন (উপরে সংযুক্ত) দেখুন।


13
এবং এটি একটি ফাইল থেকে পেতে: সেটিংস.কনফিগার (TEMPLATE_DIRS = ("।",)) টি = get_template ('test.html')
ব্রাইস

সেটিংস। কনফিগার
স্কট

উপরের "ভাল ডকুমেন্টেড" লিঙ্কটি থেকে, সংস্করণ 1.7 পর্যন্ত এটি সত্য। 1.8 থেকে শুরু করে, মনে হয় আপনার settings.configure()আর দরকার নেই।
ওলাফ ডিয়েটশে

আপনি যদি অন্যান্য টেম্পলেট অন্তর্ভুক্ত করতে চান বা টেম্পলেট উত্তরাধিকার ব্যবহার করতে চান তবে ব্রাইসের উপরের সমাধানটি প্রয়োজনীয়।
টাইটাসজান

6
টেমপ্লেট কনস্ট্রাক্টরের আগে আমাকে django.setup () কল করতে হবে।
অমিত

44

জিনজা 2 সিনট্যাক্স খুব কম পার্থক্য সহ জ্যাঙ্গোর মতোই একইরকম এবং আপনি আরও অনেক পাওয়ারফুল টেম্পলেট ইঞ্জিন পান যা আপনার টেমপ্লেটকে বাইটকোড (দ্রুততম) তেও সংকলন করে।

আমি এটিকে নিজেই জ্যাঙ্গোতেও টেম্পলেট করার জন্য ব্যবহার করি এবং এটি খুব ভাল। আপনি চাইলে কিছু বৈশিষ্ট্য অনুপস্থিত থাকলে আপনি সহজেই এক্সটেনশানগুলিও লিখতে পারেন।

কোড জেনারেশনের কিছু প্রদর্শন এখানে দেওয়া হয়েছে:

>>> 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
আমি আমার একটি প্রকল্পে জিনজা ব্যবহার করছি, কারণ আমি এমন কিছু চেয়েছিলাম যার সাথে আমি মোটামুটি পরিচিত ছিলাম, তবে আমার ব্যবহারকারীদের (যেহেতু এটি একটি বিতরণযোগ্য অ্যাপ্লিকেশন) জাঙ্গো ইনস্টল করতে হবে তা চাইনি। একটি প্লাস হ'ল জিনজা ইজি_ইনস্টল দিয়ে ইনস্টল করা যায়।
জিয়াং চিয়ামিয়াভ

4
জাজানোও ইজি_ইনস্টল সহ ইনস্টল করা যেতে পারে।
হেগমন

জিংগা এখনও আনুষ্ঠানিকভাবে পাইথন 3 সমর্থন করে না। সাইট অনুসারে, এটি এখনও পরীক্ষামূলক।
প্রমোদ

9

আপনি জ্যাঙ্গোর টেমপ্লেটগুলি ব্যবহার করতে চান এমন কোনও বিশেষ কারণ? জিনজা এবং গেঞ্চি উভয়ই আমার মতে উচ্চতর।


আপনি যদি সত্যিই চান, তবে জাজানো ডকুমেন্টেশনটিsettings.py দেখুন । বিশেষ করে "সেটিংস ছাড়াই সেটিংস ব্যবহার করা হচ্ছে" বিভাগটি DJANGO_SETTINGS_MODULE। এর মতো কিছু ব্যবহার করুন:

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

7

আমি jinja2 সুপারিশ করবে। একটা হল চমৎকার নিবন্ধ উপর djangoবনাম jinja2যে কেন আপনি পরে prefere উচিত কিছু ইন-বিস্তারিত তথ্য দেয়।


টিংগ {% set %}টেম্পলেট ইঞ্জিন (পিএইচপি) এর সিনট্যাক্স এবং সমতার কারণে আমি জিনজা 2 পছন্দ করি । ক্রস প্ল্যাটফর্ম কোডটি সর্বদা লেখাই ভাল , তবে পারফরম্যান্সের পার্থক্যটি সমালোচিত নয় - উদাহরণস্বরূপ, পাইথন সর্বদা পিএইচপি এর চেয়ে ধীর গতিতে কাজ করবে সুতরাং আপনার যদি পারফরম্যান্সের প্রয়োজন হয় তবে আপনাকে পিএইচপি, টুইগ এবং সিমফনি 2 বা অন্য কোনও সাইটের সাথে আরও ভাল তৈরি করতে হবে। দুঃখজনক হলেও সত্য।
ক্রোল করুন

@ ক্রল, যদি আপনার ওয়েবসাইটটি জটিল গণনা সম্পাদন করে তবে অজগর গ্রন্থাগারগুলি তুলনামূলক দ্রুততর হয়, অন্যথায় বাধাটি ডাটাবেস হয় বা আপনি সম্ভবত কিছু ভুল উপায় করছেন
বব

4

জিনজার ডকুমেন্টেশন অনুসারে পাইথন 3 সমর্থন এখনও পরীক্ষামূলক । সুতরাং আপনি যদি পাইথন 3 এ থাকেন এবং পারফরম্যান্স কোনও সমস্যা না হয় তবে আপনি জ্যাঙ্গোর বিল্ট টেম্পলেট ইঞ্জিনটি ব্যবহার করতে পারেন।

জ্যাঙ্গো 1.8 একাধিক টেম্পলেট ইঞ্জিনগুলির জন্য সমর্থন প্রবর্তন করেছে যার জন্য টেমপ্লেটগুলি শুরু করার পদ্ধতিতে পরিবর্তন প্রয়োজন। আপনাকে স্পষ্টভাবে কনফিগার করতে হবে settings.DEBUGযা জ্যাঙ্গোর সরবরাহিত ডিফল্ট টেম্পলেট ইঞ্জিন দ্বারা ব্যবহৃত হয়। বাকি জ্যাঙ্গো ব্যবহার না করে টেমপ্লেটগুলি ব্যবহার করার কোড এখানে।

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

অন্যেরা যা লিখেছিল তার সাথে একটি যোগ করুন, আপনি জ্যাঙ্গো> 1.7 তে জ্যাঙ্গো টেম্পলেটটি ব্যবহার করতে চাইলে আপনাকে অবশ্যই আপনার সেটিংস কনফিগার (...) টিমপ্লেটস ভেরিয়েবল এবং কলটি জাজানো.সেটআপ () কল করতে হবে:

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)

এবং যদি আপনি ডিস্ক থেকে। কনফিগারে DIRS ভেরিয়েবলটি লিখে থাকেন:

from django.template.loader import get_template
t = get_template('a.html')
t.render({'name': 5})

জ্যাঙ্গো ত্রুটি: কোনও জ্যাঙ্গো টেম্পলেটগুলি ব্যাকএন্ড কনফিগার করা হয়নি

http://django.readthedocs.io/en/latest/releases/1.7.html#standalone-scripts


2

আমি জিঞ্জাকেও বলব । এটি অবশ্যই জ্যাঙ্গো টেম্প্লেটিং ইঞ্জিনের চেয়ে বেশি শক্তিশালী এবং এটি একা দাঁড়িয়ে

যদি এটি বিদ্যমান জাঙ্গো অ্যাপ্লিকেশনটির বাহ্যিক প্লাগ হয় তবে আপনি একটি কাস্টম কমান্ড তৈরি করতে পারেন এবং আপনার প্রকল্পের পরিবেশের মধ্যে টেম্প্লেটিং ইঞ্জিনটি ব্যবহার করতে পারেন। এটার মত;

manage.py generatereports --format=html

তবে আমি মনে করি না জিনজার পরিবর্তে জ্যাঙ্গো টেম্প্লেটিং ইঞ্জিনটি ব্যবহার করা ভাল।


2

সাহায্যকারীদের জন্য ধন্যবাদ। এখানে আরও একটি সংযোজন। আপনি কাস্টম টেম্পলেট ট্যাগ ব্যবহার করা প্রয়োজন ক্ষেত্রে।

আসুন ধরা যাক আপনার কাছে read.py মডিউলটিতে এই গুরুত্বপূর্ণ টেম্পলেট ট্যাগ রয়েছে

from django import template

register = template.Library()

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

এটি এইচটিএমএল টেমপ্লেট ফাইল "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আমার জন্য একটি উত্থাপন ।
অরফিশ 13

TemplateDoesNotExistত্রুটি দেয় আমি জ্যাঙ্গো 1.10.1 ব্যবহার করছি
বিক্রান্ত সিং


1

না। ব্যবহারের StringTemplate পরিবর্তে - অন্য কোন টেমপ্লেট ইঞ্জিন বিবেচনা একবার আপনি এটি সম্পর্কে জানেন কোনো কারণ নেই।


পাইথন বন্দরটি খুব জাভা মতো দেখাচ্ছে। এটি অজগর নয়।
মাইকেল বাকলি

0

আমি উপরের বিবৃতি প্রতিধ্বনিত করি। জিনজা 2 সাধারণ ব্যবহারের জন্য জ্যাঙ্গো টেমপ্লেটগুলির একটি দুর্দান্ত ভাল সুপারসেট supers আমি মনে করি তারা জ্যাঙ্গো টেমপ্লেটগুলি সেটিংস.পাইয়ের সাথে কিছুটা কম তৈরিতে কাজ করছে, তবে জিনজার আপনার পক্ষে ভাল করা উচিত।


0

manage.pyশেল চালানোর সময় :

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

0

গুগল AppEngineজ্যাঙ্গো টেম্পলেটিং ইঞ্জিন ব্যবহার করে, আপনি কীভাবে এটি ব্যবহার করেন তা একবার দেখেছেন? আপনি সম্ভবত এটি ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.