জ্যাঙ্গো টেমপ্লেট পাথ


90

আমি একটি উইন্ডোজ 7 পরিবেশে http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 টিউটোরিয়ালটি অনুসরণ করছি । আমার সেটিংস ফাইলটি হ'ল:

TEMPLATE_DIRS = (
    'C:/django-project/myapp/mytemplates/admin'
)

আমি নিজেই জ্যাঙ্গোর সোর্স কোড (জাজানো / অবদান / অ্যাডমিন / টেমপ্লেটস) এর টিউটোরিয়ালটির নির্দেশ অনুসারে মাইএপ ডিরেক্টরিতে একটি অ্যাডমিন সাব-ডাইরেক্টরিতে ডিফল্ট জাঙ্গো অ্যাডমিন টেম্পলেট ডিরেক্টরি থেকে base_templateটেমপ্লেটটি পেয়েছি admin/base_site.html

এটি কোনও কারণে প্রভাবিত হবে বলে মনে হয় না। সমস্যা হতে পারে কোন ক্লু? আমার কি সিঙ্ক ডিবি করতে হবে?

উত্তর:


183

আমি জানি এটি জাঙ্গো টিউটোরিয়ালে নেই, এবং তাদের জন্য লজ্জাজনক তবে আপনার পাথের ভেরিয়েবলগুলির জন্য আপেক্ষিক পাথ সেট আপ করা ভাল better আপনি এটির মতো সেট আপ করতে পারেন:

import os.path

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

...

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')

TEMPLATE_DIRS = [
    os.path.join(PROJECT_PATH, 'templates/'),
]

এইভাবে আপনি নিজের জাজানো প্রকল্পটি সরিয়ে নিতে পারবেন এবং আপনার পথের শিকড়গুলি স্বয়ংক্রিয়ভাবে আপডেট হবে। আপনি যখন আপনার প্রোডাকশন সার্ভার সেট আপ করবেন তখন এটি কার্যকর।

দ্বিতীয়ত, আপনার TEMPLATE_DIRS পথে সন্দেহজনক কিছু রয়েছে। এটি আপনার টেম্পলেট ডিরেক্টরিটির মূলকে নির্দেশ করা উচিত। এছাড়াও, এটি একটি শেষের দিকেও শেষ হওয়া উচিত /

আমি এখানে অনুমান করতে যাচ্ছি যে .../admin/ডিরেক্টরিটি আপনার টেমপ্লেট রুট নয়। আপনি যদি এখনও নিখুঁত পাথ লিখতে চান তবে আপনার প্রশাসক টেম্পলেট ডিরেক্টরিটি উল্লেখ করা উচিত।

TEMPLATE_DIRS = [
    'C:/django-project/myapp/mytemplates/',
]

এটি বলা হচ্ছে যে, টেমপ্লেট ফাইলগুলি সনাক্ত করতে ডিফল্টরূপে টেমপ্লেট লোডারগুলি আপনার অ্যাপ ডিরেক্টরিতে বার বার ক্রমান্বয়ে সেট আপ করা উচিত।

TEMPLATE_LOADERS = [
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
    # 'django.template.loaders.eggs.load_template_source',
]

আপনি নির্দিষ্টভাবে কিছু ওভাররাইট করতে না চাইলে আপনার অ্যাডমিন টেমপ্লেটগুলি অনুলিপি করার দরকার নেই।

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


4
TEMPLATE_DIRS আপেক্ষিক পথটি শেষে "/ অ্যাডমিন" সরানোর জন্য ধন্যবাদ।
শায়টাক

4
এই পরামর্শটি প্রকল্প ফোল্ডারের ভিতরে টেম্পলেট ডিরেক্টরিগুলি রাখে। আরও উন্নত সংস্থার জন্য, এটির পরিবর্তে কোনও অ্যাপ্লিকেশনটির ফোল্ডারের ভিতরে রেখে দেওয়া কি আরও বেশি অর্থপূর্ণ?
সহস কাট্ট

4
এটি আমার সমস্যা সমাধান করেছে। ধন্যবাদ কিন্তু, ডিফল্ট সেটিংস ফাইলটিতে TEMPLATE_DIRS এর সাথে একটি মন্তব্য ছিল, "আপেক্ষিক পাথ নয়, পরম পথ ব্যবহার করতে ভুলবেন না।" কেউ কি এই মন্তব্যটির ন্যায়সঙ্গততা জানেন?
ভেকম্যান

4
PROJECT_PATH হ'ল প্রকল্প ফোল্ডারের নিখুঁত পথ। এই পদ্ধতিটি রানটাইমগুলিতে গতিশীলভাবে নিরঙ্কুশ মিডিয়া পাথ সেট করে তাই মানটি হার্ড কোডড হয় না এবং প্রকল্পের অবস্থানের সাথে স্বয়ংক্রিয়ভাবে পরিবর্তিত হতে পারে। এটি একটি পুরানো পোস্ট তবে আপনি প্রকল্পের কোনও ফোল্ডার বা ফাইলের অবস্থান নির্ধারণ করতে এটি ব্যবহার করতে পারেন।
ডিজিটাল ড্রিমার

4
আমি os.path.joinবেস dir পাথ সংযোজন ব্যবহার করার পরামর্শ দিতে হবে ।
এন্টোনেজস্টাম

34

যদি ইনস্টল করা হিসাবে জ্যাঙ্গো সেটিংস ব্যবহার করা হয়, তবে কেন কেবল এটির বেকড-ইন, পূর্বনির্ধারিত BASE_DIR এবং টেম্পলেটগুলি ব্যবহার করবেন না? জাইঙ্গো ইনস্টল করা পাইপে (v1.8), আমি পেয়েছি:

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


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            ### ADD YOUR DIRECTORY HERE LIKE SO:
            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',
            ],
        },
    },
]

4
এই «BASE_DIR + '/ টেম্পলেট /',» কৌশলটি করেছে। এবং এটি পৃথক বিভাগের চেয়েও আরও মার্জিত দেখাচ্ছে।
ম্যাক্সিলার

4
os.path.join(BASE_DIR, 'templates')প্ল্যাটফর্মটি স্বাধীন হওয়ার জন্য ব্যবহার করুন ।
অভয়দাই

12

প্রকল্প ডিরেক্টরিতে টেমপ্লেট রাখার জন্য জ্যাঙ্গো ২.০.৩ এ স্মার্ট সমাধান ( /root/templates/app_name):

সেটিংস.পি

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMP_DIR = os.path.join(BASE_DIR, 'templates')
...
TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [TEMP_DIR],
...

ভিউ.পি-তে কেবল এই জাতীয় টেম্পলেট পথ যুক্ত করুন:

app_name/html_name

9

জ্যাঙ্গো 1.6.6 এর জন্য:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')

ডিবাগ এবং উত্পাদন মোডের জন্য স্থিতিশীল এবং মিডিয়া:

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
if DEBUG:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
else:
    STATIC_ROOT = %REAL_PATH_TO_PRODUCTION_STATIC_FOLDER%
    MEDIA_ROOT = %REAL_PATH_TO_PRODUCTION_MEDIA_FOLDER%

Urls.py এ আপনাকে অবশ্যই যুক্ত করতে হবে:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

from news.views import Index

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    ...
    )

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

জ্যাঙ্গো 1.8 এ আপনি একটি অভিধানে টেমপ্লেটগুলির জন্য টেমপ্লেট পাথ, ব্যাকএন্ড এবং অন্যান্য পরামিতি সেট করতে পারেন ( সেটিংস.পি ):

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            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',
            ],
        },
    },
]

অফিসিয়াল ডকস


টেমপ্লেট পাথটি একটি টিউপল হওয়া দরকার: এই TEMPLATE_DIRS = (os.path.join (BASE_DIR, 'টেমপ্লেটস')) ব্যবহার করুন
রেন্ডারবক্স করুন

6

আমার টিউটোরিয়ালটির এই অংশটি (সংস্করণ 1.7 এর জন্য ব্যবহৃত টিউটোরিয়াল) নিয়ে সমস্যা ছিল।

আমার ভুলটি হ'ল আমি কেবল 'জ্যাঙ্গো প্রশাসন' স্ট্রিংটি সম্পাদনা করেছি এবং ম্যানুয়ালটিতে যথেষ্ট মনোযোগ দিই নি।

এটি জাঙ্গো / অবদান / অ্যাডমিন / টেম্পলেটগুলি / অ্যাডমিন / বেস_সাইট html এর লাইন :

<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>

তবে কিছু সময় এবং হতাশার পরে এটি স্পষ্ট হয়ে যায় যে সেখানে 'সাইট_হেডার বা ডিফল্ট: _' বিবৃতি ছিল, যা সরানো উচিত। সুতরাং বিবৃতি অপসারণের পরে (ম্যানুয়ালটিতে উদাহরণের মতো প্রত্যাশার মতো কাজ করেছেন)।

উদাহরণ ম্যানুয়াল:

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>

2

ঠিক আছে 😁 আসুন আমরা বলি যে আপনার কাছে একটি নতুন প্রকল্প রয়েছে, যদি আপনি settings.pyফাইলটি অনুসন্ধান করতে যান এবং TEMPLATESএকবার এটি সন্ধান করে দেখেন যে আপনি কেবল এই লাইনটি শেষের os.path.join(BASE_DIR, 'template')মধ্যে পেস্ট করেছেন 'DIRS', আপনার এই জাতীয় কিছু পাওয়া উচিত:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'template')
        ],
        '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',
            ],
        },
    },
]

যদি আপনি জানতে চান যে আপনার BASE_DIR ডিরেক্টরিটি কোথায় রয়েছে তবে এই 3 টি সাধারণ কমান্ডটি টাইপ করুন:

python3 manage.py shell

একবার আপনি শেলের মধ্যে থাকলে:

>>> from django.conf import settings
>>> settings.BASE_DIR

PS: আপনি যদি অন্য কোনও নাম দিয়ে আপনার টেম্পলেট ফোল্ডারের নাম রাখেন তবে আপনি এটি এখানেও পরিবর্তন করবেন।


2

জাঙ্গো ৩.১-তে, আপনার প্রকল্পের সেটিং এ যান এবং ওএস আমদানি করুন

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',
            ],
        },
    },
]

1

জ্যাঙ্গো ২.২ এ এখানে ব্যাখ্যা করা হয়েছে

https://docs.djangoproject.com/en/2.2/howto/overriding-templates/

import os

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

INSTALLED_APPS = [
    ...,
    'blog',
    ...,
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        ...
    },
]

0

মূলত BASE_DIRআপনার জ্যাঙ্গো প্রকল্প ডিরেক্টরিটি যেখানে একই ডিয়ার manage.py

    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',
                ],
            },
        },
    ]


0

এই থ্রেডে পোস্ট করা কয়েকটি জবাবের বিপরীতে, যোগ করার 'DIRS': ['templates']কোনও প্রভাব নেই কারণ 'টেম্পলেটগুলি হ'ল ডিফল্ট পাথ যেখানে জ্যাঙ্গো টেমপ্লেটগুলি সন্ধান করে।

আপনি যদি কোনও অ্যাপের টেম্পলেটটি উল্লেখ করার চেষ্টা করছেন, আপনার অ্যাপটি INSTALLED_APPSমূল প্রকল্পের তালিকায় রয়েছে তা নিশ্চিত করুন settings.py

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