كيف جانغو تخدم وسائل الاعلام الملفات ؟
سؤال
لدي اقامة جانغو تطبيق يستخدم الصور.أعتقد أنني يجب تعيين إعدادات الوسائط MEDIA_ROOT و MEDIA_URL بشكل صحيح.لكن الصور لا تظهر.هل تعرف ماذا يمكن أن تكون المشكلة ؟
دعونا النظر في هذا المثال:
ملفات الصور تحت /home/www/وسائل الإعلام/التطبيق/صور ونحن نحاول طلب http://example.com/photos/123.jpg
يجب استخدام هذه الإعدادات ؟
MEDIA\_ROOT = /home/www/media
MEDIA_URL = http://example.com/app
تحديث: نسيت أن أذكر أن أنا باستخدام المدمج في تنمية الخادم.
المحلول
وخدمة محتوى ثابت من جانغو هو على بالإحباط من المطور نفسه (إذا لم أكن مخطئا، وأنها تعمل فقط عندما تكون في وضع التصحيح). يجب عليك استخدام خادم الويب مخصصة، بدلا من ذلك.
إذا كنت حقا بحاجة للقيام بذلك، على أي حال، وقراءة وثائق حول كيف لخدمة الملفات الثابتة .
نصائح أخرى
من أجل التنمية فقط
يمكنك إعداد ثابتة وسائل الاعلام الخادم للاستخدام مع خادم التطوير من خلال القيام بذلك في urls.py
الملف.وقد أرفقت الكود تظهر كيف استخدامه (جنبا إلى جنب مع القسري التصحيح الشرطية.)
from django.conf import settings
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^$', 'views.index'),
# Accounts
(r'^accounts/login/$', 'views.user_login'),
(r'^accounts/logout/$', 'views.user_logout'),
# Contrib Modules
(r'^admin/(.*)', admin.site.root),
)
if settings.DEBUG :
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
)
أضع MEDIA_ROOT
في دليل فرعي من html/وسائل الإعلام والارتباط به على هذا النحو في settings.py
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'html/media/').replace('\\','/')
بعد تطوير الانتهاء من المشروع يحصل على نشرها إلى ملقم ويب حيث ثابتة ملفات الوسائط ثم تقدم أباتشي باستخدام التوجيهات.
وهذه هي الطريقة الصحيحة لإظهار ملفات الصور مع ImageField. تخيل لدينا صورة الملف الشخصي للمستخدم:
وmodels.py:
UserProfile:
profilePic= models.ImageField( upload_to='PATH_TO_UPLOAD', blank=True, null=True)
وsettings.py:
MEDIA_ROOT = 'FULL_PATH_OF_MEDIA'
MEDIA_URL = 'URL_OF_MEDIA'
وurls.py:
urlpatterns = [
.
.
.
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
وPATH_TO_UPLOAD هو الطريق الذي يذهب تحميل بيانات المستخدم. وهذا هو الدليل الفرعي من FULL_PATH_OF_MEDIA، مما يعني أن الملف الذي تم تحميله يكون
FULL_PATH_OF_MEDIA/PATH_TO_UPLOAD
وpath.Now كامل يمكن الوصول إليها هذا المحتوى في هذا الرابط:
SITE_NAME/URL_OF_MEDIA/PATH_TO_UPLOAD
وأوصي أيضا تقرأ هذا على static_files مقابل media_files
وأظن أنك تحصل على جانغو 404 صفحة.محاولة الوصول مباشرة إلى واحدة من الصور الخاصة بك ومعرفة ما إذا كان هذا يحدث.
أنا بحاجة إلى تكوين ملقم ويب الخاص بك إلى لا ترسل الطلبات خلال وسائل الاعلام الخاصة بك الهرمي جانغو ولكن بدلا من أن تكون لهم مباشرة.هنا قصاصة من أباتشي الملف conf.القسم الأول يقول أباتشي إلى إرسال كل شيء إلى جانغو.القسم الثاني يحتوي "SetHandler لا شيء" الذي يقول "التعامل مع الأشياء تحت /وسائل الإعلام بالطريقة العادية."
انظر http://docs.djangoproject.com/en/dev/howto/deployment/modpython/ لجميع التفاصيل المثيرة.
جزئية httpd.conf file for PrinceOfPinot.com (ويعرف أيضا باسم البوب):
<Location "/">
SetHandler python-program
PythonAutoReload Off
PythonDebug Off
PythonPath "['/var/www/production/pop', '/usr/local/lib/python2.5/site-packages/django'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE settings
PythonHandler django.core.handlers.modpython
</Location>
<Location "/media">
SetHandler None
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
</Location>
أنا على علم أن الأصل في السؤال هو مع ديف الخادم ، ولكن عن أي شخص آخر يبحث عن بيئة إنتاج الجواب:
https://docs.djangoproject.com/en/1.8/howto/static-files/deployment/ يوفر دليل على كيفية الحصول جانغو تخدم الملفات في بيئة إنتاج.من لهجة الدليل ، فإنه لا يبدو أن يعني ذلك فمن الأفضل أن يكون خادم الويب منفصل للتعامل مع الملفات أو استخدام mod_wsgi مع اباتشي