জ্যাঙ্গোতে স্থির STATIC_URL এবং STATIC_ROOT এর মধ্যে পার্থক্য


127

আমি বিভ্রান্ত হয়েছি static rootএবং বিষয়গুলি স্পষ্ট করতে চাই।

জ্যাঙ্গোতে স্থির ফাইলগুলি পরিবেশন করতে, নিম্নলিখিতটি থাকা উচিত settings.pyএবং urls.py:

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

1. স্থিতিশীল ফাইলগুলি সংগ্রহ করা উচিত সেই ডিরেক্টরিটির সম্পূর্ণ পথ

STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')

স্ট্যাটিক ফাইলগুলির জন্য ইউআরএল উপসর্গ

STATIC_URL = '/static/'

স্ট্যাটিক ফাইলগুলির জন্য অতিরিক্ত স্থান

STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)

... এবং urls.pyনিম্নলিখিত লাইনে:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
    r'^static/(?P<path>.*)$',
    'django.views.static.serve',
    {'document_root': settings.STATIC_ROOT}
))

৪. আমরাও ব্যবহার করি python manage.py collectstatic

প্রশ্নাবলী:

  1. যে কেউ দয়া করে আমাকে ওয়ার্কফ্লো ব্যাখ্যা করতে পারেন: জিনিসগুলি কীভাবে আদর্শভাবে করা উচিত। এখন পর্যন্ত, আমি উপরের কোড স্নিপেটগুলি তাদের নির্ধারিত স্থানে অনুলিপি / আটকানো এবং স্ট্যাটিক ডিরেক্টরিতে নতুন ফাইলগুলি তৈরি করা চালিয়ে যাচ্ছি এবং এটি কাজ করে। আমার মধ্যে settings.STATIC_ROOT, আমি একটি ভিন্ন ডিরেক্টরি নির্দেশ করেছেন।

  2. কেউ যদি প্রতিটি সেটিংয়ের ওয়ার্কফ্লো ব্যাখ্যা করতে পারে তবে দুর্দান্ত হবে: ফাইলগুলি কীভাবে সংগ্রহ এবং পরিচালনা করা হয় এবং কী অনুসরণ করা ভাল অনুশীলন হবে।

ধন্যবাদ।


'কর্মপ্রবাহের ব্যাখ্যা' দিয়ে আপনি কী বোঝাতে চেয়েছেন তা কি আপনি পরিষ্কার করতে পারেন? এছাড়াও আপনার ইউআরএল নিদর্শনগুলি শর্তাধীন হওয়া উচিত যদি আপনি ৩ য় অংশে বিকাশ করছেন তবে আপনি if settings.DEBUG:জাজানো যুক্ত করে এটি করতে পারেন স্ট্যাটিক মিডিয়া পরিবেশন করা খুব ভাল নয়, এটি একটি সত্যিকারের ওয়েবসার্ভারে রেখে দেওয়া উচিত।
dm03514

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

ভাল ব্যাখ্যা, ধন্যবাদ
অজয় কুমার

উত্তর:


89

STATIC_ROOT

ডিরেক্টরিতে নিখুঁত পাথ যেখানে ./manage.py collectstaticস্থাপনার জন্য স্থির ফাইল সংগ্রহ করা হবে। উদাহরণ:STATIC_ROOT="/var/www/example.com/static/"

এখন কমান্ডটি ./manage.py collectstaticসমস্ত স্থিতিশীল ফাইলগুলি (যেমন আপনার অ্যাপ্লিকেশনগুলির স্ট্যাটিক ফোল্ডারে, সমস্ত পথে স্থিতিশীল ফাইলগুলি) ডিরেক্টরিতে অনুলিপি করবে /var/www/example.com/static/। এখন আপনাকে কেবল অ্যাপাচি বা এনগিনেক্স..ইটিসি তে এই ডিরেক্টরিটি পরিবেশন করতে হবে।

STATIC_URL

URLযার স্ট্যাটিক ফাইল STATIC_ROOTডিরেক্টরি (Apache বা nginx..etc দ্বারা) পরিবেশিত হয়। উদাহরণ: /static/বাhttp://static.example.com/

আপনি সেট করেন তাহলে STATIC_URL = 'http://static.example.com/', তাহলে আপনি পরিবেশন করা উচিত নয় STATIC_ROOTফোল্ডারের (অর্থাত "/var/www/example.com/static/"URL- এ Apache বা nginx দ্বারা) 'http://static.example.com/'(যাতে আপনি স্ট্যাটিক ফাইল পাঠাতে পারেন যে '/var/www/example.com/static/jquery.js'সঙ্গে 'http://static.example.com/jquery.js')

এখন আপনার জাঙ্গো-টেম্পলেটগুলিতে আপনি এটিকে উল্লেখ করতে পারেন:

{% load static %}
<script src="{% static "jquery.js" %}"></script>

যা রেন্ডার করবে:

<script src="http://static.example.com/jquery.js"></script>

1
আপনার উদাহরণ এবং এটির মধ্যে কী দ্বন্দ্ব রয়েছে: href = "{% স্থিতিশীল" jquery.js "%}"
ব্যবহারকারী

8
@ ম্যাকডোনজো {{ STATIC_URL }}jquery.jsএবং উভয়ই {% static "jquery.js" %}সমান। অর্থাৎ উভয়ই ফিরে আসবে /static/jquery.jsআরও নতুন জ্যাঙ্গো সংস্করণগুলি ব্যবহারের জন্য পরামর্শ দেয় {% static "jquery.js" %}, তবে আপনাকে টেমপ্লেট্যাগটি লোড করতে হবে {% load staticfiles %}। মধ্যে বয়স্ক জ্যাঙ্গো সংস্করণ বিশেষ পরামর্শ দেওয়া হচ্ছে{{STATIC_URL}}
suhailvs

আমি দেখি. আমি এমন একটি বাগ খুঁজতে চেষ্টা করছিলাম যার ফলে আমার বেশিরভাগ টেমপ্লেটগুলি একটি পৃষ্ঠা ব্যতীত আমার স্টাইলশীট লোড করতে পারে। আমি staticপদ্ধতির পরিবর্তে এটি STATIC_URLপদ্ধতিতে পরিবর্তন করেছি এবং বাগটি চলে গেছে। সংস্করণগুলির উপর ভিত্তি করে পরামর্শগুলিতে ভাল কল।
ব্যবহারকারী

37

STATICFILES_DIRS: আপনি এখানে আপনার প্রকল্পের জন্য স্ট্যাটিক ফাইল রাখতে পারেন যেমন আপনার টেমপ্লেট দ্বারা ব্যবহৃত ফাইলগুলি।

STATIC_ROOT: এটি খালি ছেড়ে দিন, যখন আপনি manage.py collectstaticএটি করবেন , এটি আপনার সিস্টেমে সমস্ত স্থিতিশীল ফাইলগুলি অনুসন্ধান করবে এবং এগুলি এখানে সরিয়ে ফেলবে। আপনার স্থিতিশীল ফাইল সার্ভার যেখানেই অবস্থিত সেখানে এই ফোল্ডারে ম্যাপ করার কথা। কালেক্টেস্ট্যাটিক চালানোর পরে এটি পরীক্ষা করে দেখুন এবং ডায়ানগোর নির্মিত ডিরেক্টরি কাঠামোটি পাবেন।

-------- সম্পাদনা ----------------

@ ডার্কসিগনাস দ্বারা চিহ্নিত হিসাবে, STATIC_ROOT আপনার ফাইল সিস্টেমের একটি ডিরেক্টরিতে নির্দেশ করা উচিত, ফোল্ডারটি খালি হওয়া উচিত কারণ এটি জ্যাঙ্গো দ্বারা জনবহুল হবে।

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

অথবা

STATIC_ROOT = '/opt/web/project/static_files'

-------- শেষ সম্পাদনা -----------------

STATIC_URL: '/ স্ট্যাটিক /' সাধারণত ভাল থাকে, এটি স্ট্যাটিক ফাইলগুলির জন্য কেবল একটি উপসর্গ হয়।


2
এখানে, স্থির ফাইল ব্যবস্থাপনার লিঙ্কটি 1.3 ডক্স.ডজ্যাঙ্গোপ্রজেক্ট /en/1.3/howto/static-files
কেনি

2
STATICFILES_DIRSস্ট্যাটিক ফাইলগুলির জন্য অতিরিক্ত ডায়ার হিসাবে পরিবেশন করা উচিত I আপনি যদি আপনার সমস্ত সিএসএস / জেএস / চিত্রগুলি APP_NAME / স্থিতিশীল / অ্যাপ্লিকেশন ফোল্ডারে রেখে দেন তবে নির্দিষ্ট করার দরকার নেই STATICFILES_DIRS
লাইক

উত্তরের জন্য ধন্যবাদ, STATIC_ROOT খালি ছাড়ার বিষয়ে, কালেক্টেস্ট্যাটিক কমান্ড চালানোর আগে আমাকে আসলে এটি settings.py( নির্দিষ্ট করে STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')) এ নির্দিষ্ট করতে হয়েছিল ।
ডার্কসিগনাস

হুম, আমি দেখতে পাচ্ছি এটি কত সহজেই বিভ্রান্তিকর হতে পারে। এটি খালি রেখে আমি যা বোঝাতে চাইছি তা হ'ল এটি সাধারণত খালি শুরু হয়, এতে কোনও ফাইল নেই। বিভ্রান্তি দূর করতে আমি উত্তরটি আপডেট করব।
কেনি

2

উপরের সমস্ত উত্তর সহায়ক তবে কেউই আমার সমস্যার সমাধান করেনি। আমার প্রোডাকশন ফাইলে, আমার STATIC_URL ছিল https://<URL>/staticএবং আমি আমার দেব সেটিংস.পি ফাইলটিতে একই STATIC_URL ব্যবহার করেছি।

এটি জাঙ্গো / কনফারেন্স / ইউআরএল / স্ট্যাটিক.পিতে নিঃশব্দ ব্যর্থতার কারণ।

পরীক্ষাটি elif not settings.DEBUG or '://' in prefix: ইউআরএলে '//' বাছাই করে এবং স্ট্যাটিক URL প্যাটার্নটি যুক্ত করে না, কোনও স্থির ফাইল খুঁজে পাওয়া যায়নি।

এটা তোলে সেই বিষয়টি বিবেচনা করবে জ্যাঙ্গো থুতু একটি ত্রুটির বার্তা জানায় আপনি একটি ব্যবহার করতে পারবেন না http(s)://সঙ্গেDEBUG = True

আমাকে '/ স্ট্যাটিক /' হতে STATIC_URL পরিবর্তন করতে হয়েছিল

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