Django Admin:类媒体

arj*_*jun 6 django django-admin

我有一个媒体类,如下

class helloAdmin(admin.ModelAdmin):
    class Media:
        js = ['choice.js']
admin.site.register(hello,helloAdmin)
Run Code Online (Sandbox Code Playgroud)

staticfiles应用程序STATIC_URL位于媒体路径之前。但我想MEDIA_URL,以预先考虑,而不是STATIC_URLSTATIC_URL不为空。如何才能做到这一点?

aru*_*lmr 6

您可以通过以下设置来实现:

import os
CURRENT_PATH = os.path.abspath((os.path.dirname(__file__)))

MEDIA_ROOT = os.path.join(CURRENT_PATH, 'uploads')

MEDIA_URL = '/site_media/'
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.conf import settings
urlpatterns += patterns('',
    url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
)
Run Code Online (Sandbox Code Playgroud)

管理员

class helloAdmin(admin.ModelAdmin):
    class Media:
        js = ['/site_media/choice.js']
admin.site.register(hello,helloAdmin)
Run Code Online (Sandbox Code Playgroud)

MEDIA_URL建议不要使用来提供静态文件。根据Django文档,MEDIA_URL也不会被称为媒体文件,当STATIC_URL不为空。请参阅文档的此部分

因此,我建议您使用以下设置:

STATIC_ROOT = 'static/'

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(CURRENT_PATH, 'media'),
)
Run Code Online (Sandbox Code Playgroud)

管理员

class helloAdmin(admin.ModelAdmin):
    class Media:
        js = ['choice.js']
admin.site.register(hello,helloAdmin)
Run Code Online (Sandbox Code Playgroud)