জ্যাঙ্গো মিডিয়া_উইউর এবং মিডিয়া_রোট


229

আমি জ্যাঙ্গো অ্যাডমিনের মাধ্যমে একটি চিত্র আপলোড করার চেষ্টা করছি এবং তারপরে একটি চিত্রের সম্মুখভাগের পৃষ্ঠায় বা কেবলমাত্র একটি URL এর মাধ্যমে that

নোট করুন এটি আমার স্থানীয় মেশিনে রয়েছে।

আমার সেটিংস নিম্নরূপ:

MEDIA_ROOT = '/home/dan/mysite/media/'

MEDIA_URL = '/media/'

আমি আপলোড_পরিমিতিটিকে 'চিত্রগুলিতে' সেট করেছি এবং ফাইলটি সঠিকভাবে ডিরেক্টরিতে আপলোড করা হয়েছে:

'/home/dan/mysite/media/images/myimage.png'

তবে, যখন আমি নীচের ইউআরএলে চিত্রটি অ্যাক্সেস করার চেষ্টা করি:

http://127.0.0.1:8000/media/images/myimage.png

আমি একটি 404 ত্রুটি পেয়েছি।

আমার কি আপলোড করা মিডিয়াগুলির জন্য নির্দিষ্ট URLconf প্যাটারগুলি সেটআপ করতে হবে?

কোন পরামর্শ প্রশংসা।

ধন্যবাদ।

উত্তর:


293

জ্যাঙ্গো> = 1.7 এর জন্য আপডেট

প্রতি জ্যাঙ্গো ২.১ ডকুমেন্টেশন: বিকাশের সময় কোনও ব্যবহারকারী দ্বারা আপলোড করা ফাইলগুলি পরিবেশন করা হচ্ছে

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

আপনার আর দরকার নেই if settings.DEBUGকারণ জ্যাঙ্গো হ'ল এটি নিশ্চিত করে যে এটি কেবলমাত্র ডিবাগ মোডে ব্যবহৃত হয়।


জ্যাঙ্গোর মূল উত্তর <= 1.6

এটি আপনার url.py এ রাখার চেষ্টা করুন

from django.conf import settings

# ... your normal urlpatterns here

if settings.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.MEDIA_ROOT}))

এটির সাহায্যে DEBUG = Trueআপনি জ্যাঙ্গো থেকে স্থিতিক মিডিয়া পরিবেশন করতে পারবেন (যখন আপনি স্থানীয় কম্পিউটারে চালাবেন) তবে আপনি যখন ওয়েব প্রোভারেশন কনফিগারেশনকে স্ট্যাটিক মিডিয়া পরিবেশন করতে পারেন এবং আপনি যখন প্রোডাকশনে যান এবংDEBUG = False


14
পুনশ্চ. এরপরে আপনি এটি আপনার টেমপ্লেটগুলিতে ব্যবহার করতে পারেন: <img src = "{ED MEDIA_URL}} চিত্র / মাইমাজে.পিএনজি" />
ক্যারিক

আমি মনে করি না এর ^আগে সাইন যোগ করা ভাল media//(?P<path>.*)$, যখন আমরা অ্যাপ ইউআরএল পথে (যেমন http://127.0.0.1:8000/myapp/media/img/logo.png) মিডিয়া ফাইল অ্যাক্সেস করি তখন এই নিয়মিত গণিত হয় না।
জ্যাক জাং

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

1
যদি আপনি জ্যাঙ্গো 1.5+ ব্যবহার করেন তবে দয়া করে নীচের উত্তরটি দেখুন; এটি একটি ভাল সমাধান।
থানা ব্রিমহল

এটি কি আপনার অ্যাপ্লিকেশন বা প্রজেক্টের urls.py?
ব্যবহারকারী7804781

105

দয়া করে অফিসিয়াল জ্যাঙ্গো ডিওসি সাবধানে পড়ুন এবং আপনি সবচেয়ে উপযুক্ত উত্তর খুঁজে পাবেন।

এটি সমাধানের সর্বোত্তম এবং সহজ উপায় নীচের মত।

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


এটি অ্যাপাচি দিয়ে উত্পাদনে এভাবে ব্যবহার করা ঠিক আছে কি?
andilabs

1
@ কান্দি - উত্পাদনে এইভাবে ব্যবহার করা ঠিক নয়। আপনার উত্পাদনে এটি অ্যাপাচি এর মাধ্যমে কনফিগার করা উচিত।
বিকাশ গুলতি


1
তবে কোনও কোড ছাড়াই এই কোডটি এখানে রেখে দেওয়া ঠিক আছে if settings.DEVকারণ এটি স্বয়ংক্রিয়ভাবে অক্ষম হয়ে গেছে?
jozxyqk

70

জ্যাঙ্গো ১.৯ এর জন্য আপনাকে ডকুমেন্টেশন অনুসারে নিম্নলিখিত কোডটি যুক্ত করতে হবে:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

আরও তথ্যের জন্য, আপনি এখানে উল্লেখ করতে পারেন: https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-files-uploaded-by-a-user-during-de વિકાસ


2
এটি django> 1.9, থ্যাঙ্কস এর সমাধান।
unixeO

13
আমি এটি দুর্ঘটনাক্রমে যা করেছি তা কেবল আপনার প্রোজেক্টের url.py- এ না রেখে আপনার অ্যাপ্লিকেশানের নয় এটি নিশ্চিত করুন।
জার্নো

3
1.10 এও আমার জন্য কাজ করেছেন।
ডিলিট

আমার জন্য কাজ করে না। সম্ভবত সেটিংস.পি-তে কোনও নেসারারি অন্তর্নিহিত সেটিংস রয়েছে?
ফিউশন

25

এখানে আমি জাজানো ২.০ তে কী করেছি। প্রথমে MEDIA_ROOT এ একটি মিডিয়া_ URL সেট করুনsetting.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'data/') # 'data' is my media folder
MEDIA_URL = '/media/'

তারপর Enable media context_processors মধ্যে TEMPLATE_CONTEXT_PROCESSORSযোগ করে

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            #here add your context Processors
            'django.template.context_processors.media',
        ],
    },
},
]

তোমার media context processorসক্ষমিত এখন যে RequestContextএকটি পরিবর্তনশীল উপস্থিত থাকবে MEDIA_URL

এখন আপনি আপনার এটিতে অ্যাক্সেস করতে পারেন template_name.html

<p><img src="{{ MEDIA_URL }}/image_001.jpeg"/></p>

আশ্চর্যজনকভাবে ব্যাখ্যা করা - এটি আমার জন্য উত্তর ছিল। কীটি মিডিয়া প্রসঙ্গে প্রসেসর যুক্ত করছিল ।
ডেভিড ম্যানেস

23

আমার কি আপলোড করা মিডিয়াগুলির জন্য নির্দিষ্ট URLconf প্যাটারগুলি সেটআপ করতে হবে?

হ্যাঁ. বিকাশের জন্য, এটি আপনার ইউআরএলএনএফ-এ যোগ করার মতোই সহজ:

if settings.DEBUG:
    urlpatterns += patterns('django.views.static',
        (r'media/(?P<path>.*)', 'serve', {'document_root': settings.MEDIA_ROOT}),
    )

তবে উত্পাদনের জন্য, আপনি অ্যাপাচি, লাইটটিপিডি, এনগিনেক্স বা আপনার পছন্দসই ওয়েব সার্ভার ব্যবহার করে মিডিয়া পরিবেশন করতে চাইবেন।


3
এর অর্থ কীভাবে আপনি সার্ভারটি কনফিগার করবেন?
এম হর্নব্যাকার

আমি "নিদর্শন" এর একটি অমীমাংসিত রেফারেন্স পেয়েছি, এটি কোথাও থেকে আমদানি করা হয়েছে?
ব্যবহারকারী7804781

6

(কমপক্ষে) জাঙ্গো ১.৮ এর জন্য:

আপনি যদি ব্যবহার

if settings.DEBUG:
  urlpatterns.append(url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))

উপরে বর্ণিত হিসাবে, নিশ্চিত হয়ে নিন যে কোনও "সমস্ত ক্যাচ করুন" url প্যাটার্ন, কোনও ডিফল্ট দৃশ্যে পরিচালিত হওয়ার আগে urlpatterns = [] এ আসে comes যেমন অ্যাপেন্ড যুক্ত স্কিমটিকে তালিকার শেষের দিকে রাখবে, তবে অবশ্যই পূর্ববর্তী কোনও url প্যাটার্নটি মেলে না তবে এটি পরীক্ষা করা হবে। আপনি যদি এ জাতীয় কিছু ব্যবহার করে এড়াতে পারেন যেখানে "ক্যাচ অল" ইউআরএল প্যাটার্নটি একেবারে শেষে যুক্ত করা হয়, তবে যদি বিবৃতি থেকে পৃথক থাকে:

if settings.DEBUG:
    urlpatterns.append(url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))

urlpatterns.append(url(r'$', 'views.home', name='home')),

6

জাঙ্গো ১.১০.০ ব্যবহার করে জ্যাঙ্গো -পাবলিকেশন অ্যাপ্লিকেশনটির জন্য পিডিএফগুলি সরবরাহ করতে আমাকে যে পরিবর্তনগুলি করতে হয়েছিল তা এখানে :

আপনি যেমন মিডিয়া ডিরেক্টরিতে একই সংজ্ঞা ব্যবহার করেছেন settings.py:

MEDIA_ROOT = '/home/user/mysite/media/'

MEDIA_URL = '/media/'

প্রকল্পটির মূল হিসাবে @ থিশিস্বস্বনিপান্ডে সরবরাহ করেছেন urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

এবং @ আর-এলেলা প্রদত্ত উত্তরের একটি পরিবর্তন, এতে settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # ... the rest of your context_processors goes here ...
                'django.template.context_processors.media',
            ],
         },
    },
]

4

আপনার সমস্ত URLconf প্যাটার্ন সেট আপ করার পরে আপনি সম্ভবত আর একটি সমস্যার মুখোমুখি হতে পারেন যা ভেরিয়েবলটি {{ MEDIA_URL }}আপনার টেম্পলেটগুলিতে কাজ করবে না। এটি ঠিক করার জন্য, আপনার সেটিংস.পিতে , আপনি যুক্ত করেছেন তা নিশ্চিত করুন

django.core.context_processors.media

আপনার TEMPLATE_CONTEXT_PROCESSORS


2

জ্যাঙ্গো 1.8 এর জন্য মাইকা ক্যারিক উত্তর যুক্ত করা:

if settings.DEBUG:
  urlpatterns.append(url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))

1
আমার জন্য কাজ করে না (1.10)। TypeError: view must be a callable or a list/tuple in the case of include().
ডিলিট

2

জ্যাঙ্গো ১.১১ এর সাথে পাইথন ৩.6-এ DEBUG = মিথ্যা মোডে চিত্রের রেন্ডারিং অর্জন করতে আমি এটিই করেছি

from django.views.static import serve
urlpatterns = [
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
# other paths
]

2

ডিবাগ মোডের জন্য => 3.0 এর জন্য উপরে উল্লিখিত পদক্ষেপগুলি অনুসরণ করুন

urlpatterns = [
...
]
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

এবং সেই অংশটি যা আমাকে ধরেছিল , উপরের স্থির URL কেবলমাত্র আমার মূল প্রকল্প urls.py ফাইলটিতে কাজ করেছে। আমি প্রথমে আমার অ্যাপটিতে যুক্ত করার চেষ্টা করছিলাম এবং ভাবছিলাম কেন আমি ছবিগুলি দেখতে পারছি না।

অবশেষে নিশ্চিত হয়ে নিন যে আপনি নিম্নলিখিতগুলি সেট করেছেন:

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


0

আপনার সেটিং ঠিক আছে। কিছু ওয়েব সার্ভারের বিশেষত মিডিয়া এবং স্ট্যাটিক ফোল্ডার ফাইলগুলি নির্দিষ্ট করা দরকার। উদাহরণস্বরূপ পাইথোনায়্যোয়ার.কম-এ আপনাকে 'ওয়েব' বিভাগে যেতে হবে এবং মিডিয়া ফোল্ডার এবং স্ট্যাটিক ফোল্ডারটি ইউআরএল যুক্ত করতে হবে। উদাহরণ স্বরূপ:

  URL                     Directory                
/static/            /home/Saidmamad/discoverthepamirs/static     
/accounts/static/   /home/Saidmamad/discoverthepamirs/accounts/static    
/media/            /home/Saidmamad/discoverthepamirs/discoverthepamirs/media    

আমি জানি যে দেরি হয়ে গেছে, তবে কেবল একই সমস্যাটির কারণে যারা এই লিঙ্কটিতে যান তাদের কেবলমাত্র সহায়তা করতে;)

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