জ্যাঙ্গো টেম্পলেটডোস নোটএক্সিস্ট?


163

আমার লোকাল মেশিনটি পাইথন 2.5 এবং উগুন্টু ৮.১০-তে এনগিনেক্স চলছে, জ্যাঙ্গো সর্বশেষ উন্নয়নের ট্রাঙ্ক থেকে তৈরি করেছে।

আমি অনুরোধ করা প্রতিটি URL এর জন্য, এটি ছুড়ে দেয়:

টেম্পলেটডোস নোটএক্সিস্ট এ / অ্যাপ্লিকেশন / পাথ অ্যাপনাম / টেম্পলেট_নাম html

জ্যাঙ্গো এই টেমপ্লেটগুলি লোড করার চেষ্টা করেছে, এই ক্রমে: * লোডার django.template.loaders.filesystem.function ব্যবহার করে: * লোডার django.template.loaders.app_directories.function ব্যবহার করে:

TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates',)

এই ক্ষেত্রে /usr/lib/python2.5 / সাইট- প্যাকেজস / প্রজেক্টনাম / স্ট্যাম্পলেটস / অ্যাপনাম / স্টেম্পলেট_নাম এইচটিএমএল খুঁজছেন ? আজব জিনিসটি এই ফাইলটি ডিস্কে বিদ্যমান। জ্যাঙ্গো কেন এটি সনাক্ত করতে পারে না?

আমি উবুন্টু 9.04 এ পাইথন 2.6 এর সাথে কোনও সমস্যা ছাড়াই রিমোট সার্ভারে একই অ্যাপ্লিকেশনটি চালিত করি। অন্যান্য সেটিংস একই।

আমার স্থানীয় মেশিনে কোনও ভুল কনফিগার করা আছে, বা সম্ভবত এমন ত্রুটিগুলির কারণ হতে পারে যা আমার সন্ধান করা উচিত?

আমার সেটিংস.পিতে , আমি উল্লেখ করেছি:

SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

এটি নিম্নলিখিত ফাইলগুলির সন্ধান করা উচিত:

  • /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
  • /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
  • /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html
  • ...

উপরের সমস্ত ফাইল ডিস্কে বিদ্যমান।

মীমাংসিত

আমি চেষ্টা করার পরে এটি এখন কাজ করে:

chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*

এটা অদ্ভুত. এটি কাজ করতে আমার দূরবর্তী সার্ভারে এটি করার দরকার নেই।


আপনার TEMPLATE_DIRS ওয়েব সার্ভার দ্বারা পঠনযোগ্য?
জর্ডান মেসিনা

@ জর্দান, মূলের দ্বারা অ্যাক্সেসযোগ্য TEMPLATE_DIRS যথেষ্ট। এটি যা দূরবর্তী সার্ভারে কনফিগার করা রয়েছে এটি কাজ করছে।
জ্যাক

উত্তর:


196

প্রথম সমাধান :

এই সেটিংস

TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

এর অর্থ যে জাজানো templates/আপনার প্রকল্পের অধীনে ডিরেক্টরি থেকে টেমপ্লেটগুলি দেখবে ।

ধরে নিই যে আপনার জাজানো প্রকল্পটি /usr/lib/python2.5/site-packages/projectname/তখনই আপনার সেটিংসের সাথে রয়েছে জাঙ্গো এর অধীন টেম্পলেটগুলি সন্ধান করবে/usr/lib/python2.5/site-packages/projectname/templates/

সুতরাং সেক্ষেত্রে আমরা আমাদের টেমপ্লেটগুলি এভাবে কাঠামোগত করতে সরাতে চাই:

/usr/lib/python2.5/site-packages/projectname/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/templates/template3.html

দ্বিতীয় সমাধান :

যদি এটি এখনও কাজ না করে এবং ধরে নিচ্ছে যে আপনার অ্যাপ্লিকেশনগুলিকে সেটিংসে কনফিগার করা আছে py

INSTALLED_APPS = (
    'appname1',
    'appname2',
    'appname3',
)

ডিফল্টরূপে জ্যাঙ্গো templates/প্রতিটি ইনস্টল অ্যাপ্লিকেশনের অধীনে ডিরেক্টরিতে টেমপ্লেটগুলি লোড করবে । সুতরাং আপনার ডিরেক্টরি কাঠামোর সাহায্যে আমরা আমাদের টেমপ্লেটগুলি এমন হতে চাই:

/usr/lib/python2.5/site-packages/projectname/appname1/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/appname2/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/appname3/templates/template3.html

SETTINGS_PATHডিফল্ট হিসাবে সংজ্ঞায়িত করা হতে পারে। কোন ক্ষেত্রে, আপনি এটি সংজ্ঞায়িত করতে চাইবেন (সেটিংস.পায়িতে):

import os
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))

3
@ জর্পতোগি, আমি উভয় পদ্ধতির চেষ্টা করেছিলাম কিন্তু কার্যকর হয়নি। এমনকি আমি রেন্ডার_ থেকে_উত্তেজিত () যুক্তিতে টেমপ্লেটের নিখুঁত পথটি ব্যবহার করার চেষ্টা করেছি কিন্তু এখনও কার্যকর হয়নি।
জ্যাক

আপনার জ্যাঙ্গো প্রকল্পের আওতাধীন /usr/lib/python2.5/site-packages/projectname/?
জোশুয়া পার্টোগি

@ জর্পতোগি, হ্যাঁ, সমস্ত ইনস্টল করা অ্যাপ্লিকেশনগুলি /usr/lib/python2.5/site-packages/projectname/appname1 এর অধীনে রয়েছে ...
জ্যাক

আপনি কি দয়া করে আপনার মূল পোস্টটি সম্পাদনা করতে পারেন এবং সেটিংস.পিটি পেস্ট করতে পারেন। ডিবি কনফিগারেশন বাদ: -ডি। ধন্যবাদ।
জোশুয়া পার্টোগি

বিভিন্ন অ্যাপ্লিকেশন থেকে প্রতিটি টেমপ্লেটকে একটি ডিরেক্টরিতে স্থাপন templatesকরা ভাল নকশা নয়। কিন্তু, যেমন আমি জানি, আপনার যোগ করার পরে APP_NAMEমধ্যে settings.py, djangoডিরেক্টরি বয়সী যার অধীনে অ্যাপ্লিকেশনের টেমপ্লেট অনুসন্ধান করতে যেতে পারে APP_DIR। সুতরাং, আপনি বিভিন্ন অ্যাপ্লিকেশন জন্য টেমপ্লেট পৃথক করতে পারেন। (জাজানো 1.7 - .1.9
অ্যালস্টন

59

এই টিপলটি সন্ধান করুন:

    import os
    SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))

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

আপনার স্ট্রিংটিতে 'ডিআইআরএস' যুক্ত করতে হবে

"os.path.join(SETTINGS_PATH, 'templates')"

সুতরাং সামগ্রিকভাবে আপনার প্রয়োজন:

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

24
SETTINGS_PATHআসলে কোথাও সংজ্ঞায়িত করা হয় না, তাই আমি মনে করি না যে এই উত্তরটি কার্যকর হবে। হতে পারে আপনি বোঝাতে চেয়েছিলেনBASE_DIR
হালকা

1
SETTINGS_PATH = os.path.dirname (os.path.dirname ( ফাইল )) সংজ্ঞায়িত করুন
পাল

1
আমি মনে করি Shapon পাল মানে SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))না ফাইল
মাইক

20

আপনি যদি appস্ক্র্যাচ থেকে একটি যোগ করার সময় এই সমস্যাটির মুখোমুখি হন । আপনি সম্ভবত কিছু মিস করেছেন কারণ এটি সম্ভবত settings। একটি যুক্ত করার সময় তিনটি ধাপ প্রয়োজন app

1 directory ডিরেক্টরি এবং টেমপ্লেট ফাইল তৈরি করুন।

ধরুন আপনার নামের একটি প্রকল্প রয়েছে mysiteএবং আপনি একটি appনাম যুক্ত করতে চান your_app_namemysite/your_app_name/templates/your_app_nameনিম্নলিখিত হিসাবে আপনার টেমপ্লেট ফাইল রাখুন ।

├── mysite
   ├── settings.py
   ├── urls.py
   └── wsgi.py
├── your_app_name
   ├── admin.py
   ├── apps.py
   ├── models.py
   ├── templates
      └── your_app_name
          └── my_index.html
   ├── urls.py
   └── views.py

2, আপনার অ্যাড appকরতে INSTALLED_APPS

পরিবর্তন settings.py

INSTALLED_APPS = [
    ...
    'your_app_name',
    ...
]

3, আপনার অ্যাড appকরতে ডিরেক্টরির DIRSমধ্যে TEMPLATES

পরিবর্তন করুন settings.py

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR, 'your_app_name', 'templates', 'your_app_name'),
                ...
                ]
    }
]

এটিই ছিল একমাত্র সমাধান যা
জঙ্গো ২.২..7

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

13

.Py সেটিং ইন অপসারণ TEMPLATE_LOADERS টেমপ্লেট DIRS তারপর ADD

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

5

আমার একটি বিব্রতকর সমস্যা হয়েছিল ...

আমি এই ত্রুটিটি পেয়েছি কারণ আমি ছুটে যাচ্ছি এবং অ্যাপটি ভিতরে রাখতে ভুলে গেছি INSTALLED_APPS। আপনি ভাবেন যে জাঙ্গো আরও বর্ণনামূলক ত্রুটি বাড়িয়ে তুলবে।


4

কেবল একটি কুঁচক, তবে জ্যাঙ্গো টেমপ্লেট লোড করার উপর এই নিবন্ধটি দেখুন । বিশেষত, django.template.loaders.app_directories.Loaderআপনার TEMPLATE_LOADERS তালিকায় রয়েছে তা নিশ্চিত করুন ।


এটি আমার পক্ষে কাজ করেছে। ফাইল সিস্টেমে জ্যাঙ্গো অ্যাপ্লিকেশনগুলি থেকে টেমপ্লেটগুলি লোড করে। INSTALLED_APPS এ প্রতিটি অ্যাপ্লিকেশানের জন্য, লোডার একটি টেম্পলেট সাব-ডিরেক্টরিতে সন্ধান করে। ডিরেক্টরি উপস্থিত থাকলে জাজানো সেখানে টেমপ্লেট সন্ধান করে। <br> টেমপ্লেটস = [{'ব্যাকেন্ড': 'django.template.backends.django.JjangoTemplets', 'অ্যাপ্লিকেশন_ডিআরএস': সত্য,}]
বিজয়


4

আমি চেষ্টা করার পরে এটি এখন কাজ করে

chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*

এটা অদ্ভুত. এটি কাজ করার জন্য আমার রিমোট সার্ভারে এটি করার দরকার নেই।

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

chown -R www-data:www-data /var/www/projectname/*

লোকাল মেশিন উবুন্টু 8.04 ডেস্কটপ সংস্করণে চলে। রিমোট সার্ভারটি উবুন্টু 9.04 সার্ভার সংস্করণে রয়েছে।

কেউ জানে কেন?


4

জাঙ্গো সংস্করণ 1.9 এর জন্য, আমি যুক্ত করেছি

'DIRS': [os.path.join(BASE_DIR, 'templates')], 

সেটিংসে টেমপ্লেট ব্লকে লাইন করুন pyপি এবং এটি ভাল কাজ করেছে


3

জ্যাঙ্গো TemplateDoesNotExistত্রুটিটি সহজভাবে বোঝায় যে ফ্রেমওয়ার্কটি টেম্পলেট ফাইলটি খুঁজে পায় না।

টেমপ্লেট-লোডিং এপিআই ব্যবহার করতে, আপনাকে আপনার টেমপ্লেটগুলি কোথায় সংরক্ষণ করবেন তা ফ্রেমওয়ার্কটি বলতে হবে। এটি করার জায়গাটি সেটিংস করে আপনার সেটিংস ফাইলে ( settings.py) TEMPLATE_DIRS। ডিফল্টরূপে এটি একটি খালি টিপল, সুতরাং এই সেটিংটি জাঙ্গোর টেম্পলেট-লোডিং পদ্ধতিটি জানায় যে টেমপ্লেটগুলি কোথায় অনুসন্ধান করা উচিত।

একটি ডিরেক্টরি চয়ন করুন যেখানে আপনি আপনার টেম্পলেটগুলি সঞ্চয় করতে চান এবং এটি TEMPLATE_DIRS এ যুক্ত করতে চান যেমন:

TEMPLATE_DIRS = (
  '/home/django/myproject/templates',
)

1

কোন ফোল্ডারটি Template-loader postmortemজাঙ্গো ত্রুটি পৃষ্ঠায় টেমপ্লেট চেহারা লোড করার চেষ্টা করে দেখুন দেখুন উদাহরণস্বরূপ, ত্রুটিটি এর মতো হবে না:

Template-loader postmortem

Django tried loading these templates, in this order:

Using engine django:
django.template.loaders.filesystem.Loader: d:\projects\vcsrc\vcsrc\templates\base.html (Source does not exist)

আমার ভুলের vcsrc\vcsrc\templates\base.htmlপথে নয়।
তারপর পরিবর্তন TEMPLATESমধ্যে setting.pyআপনার টেমপ্লেট পথে ফাইল

TEMPLATES = [
    {    
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
         # 'DIRS': [], 
        'DIRS': [os.path.join(BASE_DIR, 'vcsrc/templates')], 
        ...

1

আমার অবশ্যই অভ্যন্তরীণ অ্যাপ্লিকেশনটির জন্য টেমপ্লেটগুলি ব্যবহার করতে হবে এবং এটি আমার জন্য কাজ করে:

'DIRS': [os.path.join(BASE_DIR + '/THE_APP_NAME', 'templates')],

1

নিশ্চিত করুন যে আপনি এ আপনার অ্যাপ্লিকেশান জুড়েছেন project-name/app-namme/settings.py INSTALLED_APPS:

INSTALLED_APPS = ['app-name.apps.AppNameConfig']

এবং এর project-name/app-namme/settings.py টেমপ্লেট:

'DIRS': [os.path.join(BASE_DIR, 'templates')],


0

হাই বন্ধুরা আমি একটি নতুন সমাধান পেয়েছি। আসলে এটি অন্য টেমপ্লেটে সংজ্ঞায়িত করা হয়েছে সুতরাং TEMPLATE_DIRS নিজেই সংজ্ঞায়িত করার পরিবর্তে আপনার ডিরেক্টরিটির নামটি এতে রাখুন: এখানে চিত্র বর্ণনা লিখুন


0

আমি এটি স্বীকার করতে বিব্রত বোধ করছি, তবে আমার কাছে সমস্যাটি ছিল যে ….hmlপরিবর্তে একটি টেম্পলেট নির্দিষ্ট করা হয়েছিল ….html। সতর্ক থেকো!


0

আমি এটি যোগ

TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

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

virtualenv env 

এবং এটি কাজ করে, কেন জানি না


0

আমি এই সমস্যা নিয়ে এসেছি। আমি এখানে এটি কীভাবে সমাধান করেছি:

আপনার TEMPLATESসেটিংস.পিটি দেখুন, ভেরিয়েবলের সন্ধান করুন, টেম্পলেটগুলির মধ্যে, DIRSতালিকার অভ্যন্তরে আপনার টেম্পলেটগুলির পথ যুক্ত করুন । আমার জন্য, প্রথম আমি আমার টেমপ্লেট পথ সেট হিসাবে TEMPLATES_PATH = os.path.join(BASE_DIR,'templates'), তারপর যোগ TEMPLATES_PATHমধ্যে DIRSতালিকা 'DIRS':[TEMPLATES_PATH,]। তারপরে সার্ভারটি পুনরায় চালু করুন, টেম্পলেটডোস নটএক্সিস্ট ব্যতিক্রমটি চলে গেছে। এটাই.


0

আপনার setting.pyফাইল DIRSTEMPLATESঅ্যারের সাথে প্রতিস্থাপন

'DIRS': []

এই

'DIRS': [os.path.join(BASE_DIR, 'templates')],

তবে 1 মনে করে আপনার জানা দরকার যে আপনাকে নামের সাথে একটি ফোল্ডার তৈরি করতে হবে templates এবং এটি মূল পথে চলতে হবে অন্যথায় আপনাকে DIRSমানটি পরিবর্তন করতে হবে


0

আপনার অ্যাপ্লিকেশনে একটি ফোল্ডার তৈরি করুন (টেমপ্লেটগুলি) আপনার অ্যাপ্লিকেশনে (বলুন যে আপনি আপনার অ্যাপটির নাম দিয়েছেন) এবং আপনি এইচটিএমএল ফাইলটি এখানে রাখতে পারেন। তবে 'টেমপ্লেটস' ফোল্ডারে একই নামের ('অ্যাপ') সহ একটি ফোল্ডার তৈরি করার পরামর্শ দেওয়া হয় এবং কেবলমাত্র সেখানেই এইচটিএমএল রাখে। 'অ্যাপ / টেম্পলেট / অ্যাপ্লিকেশন' ফোল্ডারে

2. 'অ্যাপ' এর urls.py পুটে:

  path('', views.index, name='index'), # in case of  use default server index.html 

৩. 'অ্যাপ্লিকেশন' এর দর্শনসমূহ put

from django.shortcuts import render 

def index(request): return
    render(request,"app/index.html")
    # name 'index' as you want
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.