জ্যাঙ্গো প্রকল্পে টেমপ্লেট স্থাপনের জন্য সেরা অবস্থানটি কী?


90

জ্যাঙ্গো প্রকল্পে টেমপ্লেট স্থাপনের জন্য সেরা অবস্থানটি কী?

উত্তর:


50

জাজানো বই, চতুর্থ অধ্যায় থেকে :

আপনি যদি আপনার টেমপ্লেটগুলি রাখার জন্য কোনও সুস্পষ্ট জায়গার কথা ভাবতে না পারেন, তবে আমরা আপনার জাজানো প্রকল্পের মধ্যে একটি টেম্পলেট ডিরেক্টরি তৈরি করার পরামর্শ দিই (অর্থাত্, আপনি যদি আমাদের উদাহরণগুলি অনুসরণ করে চলেছেন তবে অধ্যায় 2 এ আপনি যে মাইসাইট ডিরেক্টরিটি তৈরি করেছেন তার মধ্যে)।

এটি হ'ল আমি যা করি এবং আমার পক্ষে দুর্দান্ত কাজ করে।

আমার ডিরেক্টরি কাঠামোটি এরকম কিছু দেখাচ্ছে:

/mediaমূল প্রকল্প কোডের (যেমন পাইথন কোড)
/templatesজন্য আমার টেমপ্লেটগুলির
/projectnameজন্য আমার সমস্ত সিএসএস / জেএস / চিত্র ইত্যাদির জন্য


4
আপনি যখন টেমপ্লেটগুলিকে / টেম্পলেটগুলিতে রাখেন, তখন কি কোনও উপায় আছে যে টেম্পলেট লোডারকে TEMPLATE_DIRS এ / jjo.template.loaders.filesystem.Loader দিয়ে লোড করার জন্য / টেমপ্লেটের সম্পূর্ণ পথ নির্দিষ্ট না করে লোড করতে বলুন? এটি একটি আপেক্ষিক পথ দিয়ে করা দুর্দান্ত হবে এবং 1.4 এর নীচে আমার লোডার <প্রকল্প> / টেম্পলেটগুলির নীচে খুঁজছেন না
সিওরো সান্তিলি 郝海东 冠状 病 病 六四 事件 法轮功

88

<PROJECT>/<APP>/templates/<APP>/template.htmlঅ্যাপটিকে অন্য কোথাও পুনরায় ব্যবহারযোগ্য করে তুলতে সহায়তা করার জন্য অ্যাপ-নির্দিষ্ট টেম্পলেটগুলির জন্য স্থাপন করা হয়েছে in

সাধারণ "গ্লোবাল" টেম্পলেটগুলির জন্য আমি সেগুলিতে রেখেছি <PROJECT>/templates/template.html


11
2 কারণ আশ্চর্য <APP>s এ <PROJECT>/<APP>/templates/<APP>/template.html?
ডেভিড জিয়া

18
প্রথম / অ্যাপ্লিকেশন / টেম্পলেটগুলি কেবলমাত্র তাদের সম্পর্কিত অ্যাপ্লিকেশন সহ টেম্পলেটগুলিকে গোষ্ঠীভুক্ত করা। দ্বিতীয় অ্যাপটি হ'ল নাম সংঘর্ষ রোধ করা। (সম্ভবতঃ, আপনি এই ডিরেক্টরিগুলির প্রতিটিকে নির্দেশ করতে TEMPLATE_DIRS এ নির্দেশ করবেন তবে শেষ পর্যন্ত, জ্যাঙ্গো এগুলিকে এক বিশাল ডিরেক্টরিতে একত্রে লম্পট করে।
সিয়াসার বাউটিস্তা

4
এটি কাজ করার জন্য (ডিসেম্বর 1.6), আমাকে ফাইল সিস্টেম টেম্পলেট TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"))
লোডারটির

4
এই উত্তরটি প্রাচীন তবে কোনওভাবে আমি এখানেই শেষ করেছি। রেকর্ডটির জন্য, TEMPLATE_DIRSএখন অবহিত করা হয়েছে - আপনার পরিবর্তে যুক্ত DIRS=[os.path.join(BASE_DIR, "templates")]করা উচিত TEMPLATES- দেখুন স্ট্যাকওভারফ্লো.com
জন অ্যারন

9

ডোমিনিক এবং ডিফল্ট থেকে অনুসরণ করা,

আমরা আমাদের জ্যাঙ্গো প্রকল্প এবং অ্যাপ্লিকেশনগুলিকে আমাদের বিভিন্ন পরিবেশে স্থাপন করতে প্যাকেজ করতে একটি সেটআপলগুলি উত্স বিতরণ (এসডিস্ট) ব্যবহার করি।

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

উদাহরণস্বরূপ, আমাদের টেম্পলেট এবং স্ট্যাটিক পাথগুলি দেখতে দেখতে:

PROJECT/APP/templates/APP/template.html
PROJECT/APP/static/APP/my.js

এটি কাজ করার জন্য, MANIFEST.in এ পরিবর্তন করতে হবে (দেখুন http://docs.python.org/distutils/sourcedist.html#the-manifest-in-template )

MANIFEST.in এর একটি উদাহরণ:

include setup.py
recursive-include PROJECT *.txt *.html *.js
recursive-include PROJECT *.css *.js *.png *.gif *.bmp *.ico *.jpg *.jpeg

এছাড়াও, আপনাকে আপনার জ্যাঙ্গো সেটিংস ফাইলে নিশ্চিত করতে হবে যে অ্যাপ_ডাইরেক্টরিগুলি লোডার আপনার TEMPLATE_LOADERS এ আছে। আমি মনে করি এটি ডিফল্টভাবে জাজানো ১.৪ এ রয়েছে।

জ্যাঙ্গো সেটিংসের টেম্পলেট লোডারগুলির একটি উদাহরণ:

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

কেবলমাত্র যদি আপনি ভাবছেন যে কেবল আরএসসিএনসি ফাইলগুলি কপি করার পরিবর্তে আমরা কেন এসডিস্ট ব্যবহার করি; এটি আমাদের কনফিগারেশন পরিচালন কার্যপ্রবাহের অংশ যেখানে আমাদের একক বিল্ড টারবল রয়েছে যা পরীক্ষার, গ্রহণযোগ্যতা এবং উত্পাদন পরিবেশে অপরিবর্তিত পিআইপি সহ স্থাপন করা হয়।


4
+1 অতিরিক্ত বিশদ এবং উদাহরণ লাইন সরবরাহ করার জন্য আপনাকে ধন্যবাদ।
28:38

/static/টেমপ্লেট এবং মডুলার অ্যাপ্লিকেশনগুলির কথা চিন্তা করার সময় আপনার বিন্যাস পরিকল্পনায় অন্তর্ভুক্ত করতে +1 স্মার্ট । আপনি অন্য সেরা অনুশীলনের কথা উল্লেখ করতে পারেন, একইভাবে cssবলা ফোল্ডারে ফাইলগুলি রেখে এবং সম্ভবত বা ঠিক । static/app/cssjsjpg/static/app/images
hobs

8

ডিজেঙ্গো 1.11

টেমপ্লেট ফোল্ডার যুক্ত করুন যেখানে ম্যানেজ.পি রয়েছে, এটি আপনার বেস ডিরেক্টরি। আপনার সেটিংস.পাইতে নিম্নলিখিত হিসাবে টেপলেটগুলির DIRS পরিবর্তন করুন

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},

]

কোডটি ব্যবহার করে এখন টেমপ্লেটটি ব্যবহার করতে,

def home(request):
    return render(request,"index.html",{})

view.py এ। এটি django 1.11 এর জন্য সম্পূর্ণ জরিমানা করে


1

এটি প্রকল্প স্তরে আরও ব্যক্তিগত পছন্দ। আপনি যদি এমন অ্যাপ্লিকেশনগুলির বিষয়ে কথা বলছেন যা প্লাগযোগ্যযোগ্য হওয়া দরকার, তবে আপনার অ্যাপ্লিকেশনের একটি টেম্পলেট ডিরেক্টরি সেই জায়গা যেখানে তারা ডিফল্ট হয়। তবে প্রকল্প-ব্যাপী, এটিই আপনার পক্ষে সবচেয়ে ভাল কাজ করে।


1

আমি বুঝতে পারলাম TEMPLATE_DIRSএকটি পরম পথ প্রয়োজন requires এবং আমি আমার কোডে নিখুঁত পাথ পছন্দ করি না। সুতরাং এটি আমার পক্ষে ভাল কাজ করছে settings.py:

import os

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(os.path.realpath(__file__)),
                 "../APPNAME/templates")
)

4
জ্যাঙ্গো প্রকল্প তাদের বেস পাথ হিসাবে মান settings.py ইতিমধ্যে সংজ্ঞায়িত করেছেন BASE_DIR, তাই আপনি এই প্রক্রিয়া সহজ করতে পারেন:os.path.join(BASE_DIR, '../APPNAME/templates')
ngoue

1

জ্যাঙ্গো 1.10

TEMPLATE_DIRS অবচয় করা হয়।

এখন আমাদের ব্যবহার করা দরকার TEMPLATE, জ্যাঙ্গো ১.৮ এর মতো করে চালু করা :

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            # ... some options here ...
        },
    },
]

একবার আপনি TEMPLATES সংজ্ঞা দিলে, আপনি নিরাপদে ALLOWED_INCLUDE_ROOTS, TEMPLATE_CONTEXT_PROCESSORS, TEMPLATE_DEBUG, TEMPLATE_DIRS, TEMPLATE_LOADERS, এবং TEMPLATE_STRING_IF_INVALID মুছে ফেলতে পারবেন।

সেরা অবস্থান সম্পর্কে, জ্যাঙ্গো এই জাতীয় টেম্পলেট খুঁজছেন:

  • DIRS ডিরেক্টরিগুলির একটি তালিকা সংজ্ঞায়িত করে যেখানে ইঞ্জিনটি অনুসন্ধানের ক্রমে টেম্পলেট উত্স ফাইলগুলির সন্ধান করা উচিত।
  • অ্যাপ্লিকেশন_ডায়ারএস বলে যে ইঞ্জিনটি ইনস্টল থাকা অ্যাপ্লিকেশনগুলির অভ্যন্তরে টেম্পলেটগুলি সন্ধান করবে কিনা। প্রতিটি ব্যাকএন্ড অ্যাপ্লিকেশনগুলির অভ্যন্তরীণ সাব-ডিরেক্টরিতে একটি প্রচলিত নাম সংজ্ঞায়িত করে যেখানে এর টেমপ্লেটগুলি সংরক্ষণ করা উচিত।

আরও তথ্য: https://docs.djangoproject.com/en/1.10/topics/templates/#configration


0

পূর্ববর্তী সমাধানটি আমার ক্ষেত্রে কার্যকর হয়নি। আমি ব্যবহার করতাম:

TEMPLATE_DIRS = [ os.path.join(os.path.dirname(os.path.realpath(__file__)),"../myapp/templates") ]

আমার উত্তর দেখুন। TEMPLATE_DIRSএখন অবচয় করা হয়েছে।
উইলফ্রিড

জ্যাঙ্গো প্রকল্প তাদের বেস পাথ হিসাবে মান settings.py ইতিমধ্যে সংজ্ঞায়িত করেছেন BASE_DIR, তাই আপনি এই প্রক্রিয়া সহজ করতে পারেন:os.path.join(BASE_DIR, '../myapp/templates')
ngoue

0

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

এটি বেশ ভালভাবে কাজ করে তবে আমি ফাইল সিস্টেমের পাশ থেকে / আমদানি / সিঙ্কের ক্ষেত্রে আরও কিছুটা নমনীয়তা পছন্দ করতাম।

[সম্পাদনা করুন: 20 আগস্ট 2018 - এই সংগ্রহস্থলটি উপলভ্য নয়, একই নামের একটি https://github.com/jazzband/django-dbtemplates এ পাওয়া যায় এবং 8 মাস আগে আপডেট হয়েছিল। আমি আর জ্যাঙ্গোকে কোনও অর্থবহ উপায়ে ব্যবহার করি না, সুতরাং এটির জন্য কোনও প্রমাণ দেওয়া যায় না]]


কখন এটি একটি ভাল ধারণা হবে? ডিবি থেকে টেমপ্লেটগুলি লোড করা কি ধীর নয়?
jguffey

আপনি যদি ডিবিতে টেমপ্লেটগুলি সঞ্চয় করেন তবে আপনি ডিবি-র উপর নির্ভরশীল হয়ে উঠবেন না আপনি কী আপনার ডিবিকে গিট কমিটের একটি অংশ বানাবেন? টেমপ্লেটগুলিতে বিভিন্ন ব্যবহারকারী দ্বারা করা পরিবর্তনগুলির মধ্যে আপনি কীভাবে সমন্বয় করবেন?
গৌতমগড়ওয়াল

আমি গিট সম্পর্কে সচেতন হওয়ার আগে এটি লিখিত ছিল। এমনকি আমি নিশ্চিত না যে আমি এস.এন.এন. ব্যবহার করছিলাম। আমি এখন সংস্করণ নিয়ন্ত্রণ সিস্টেম ব্যবহার করার পরামর্শ দেব।
টনিএম

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