Django Admin Media 前缀 URL 问题

2024-05-28

我有以下文件夹结构

src\BAT\templates\admin\base.html
src\BAT\media\base.css
src\BAT\media\admin-media\base.css

设置.py

MEDIA_ROOT = os.path.join( APP_DIR, 'media' )
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/admin-media/'
TEMPLATE_DIRS = (
    os.path.join( APP_DIR, 'templates' )
)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'django.contrib.admindocs',
)

urls.py

urlpatterns = patterns('',
    (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    (r'^admin/', include(admin.site.urls)),

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

)

我需要在我的应用程序中获取这两个 CSS 文件。我的 base.html 包含

<head>
<title>{% block title %}{% endblock %}</title>
<link href="{{ MEDIA_URL }}css/base.css" rel="stylesheet" type="text/css" />
<link href="{{ MEDIA_URL }}{{ADMIN_MEDIA_PREFIX}}css/base.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/base.css{% endblock %}" />
{% block extrastyle %}{% endblock %}
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% load adminmedia %}{% admin_media_prefix %}css/ie.css{% endblock %}" /><![endif]-->
{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";</script>
{% block extrahead %}{% endblock %}
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
</head>

我想获得以下 URL 输出http://localhost:8000/admin

<head>
<title>Site administration | My site admin</title>
<link href="/media/css/base.css" rel="stylesheet" type="text/css" />
<link href="/media/admin-media/css/base.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="/media/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/media/admin/css/dashboard.css" />

但我总是得到

<head>
<title>Site administration | My site admin</title>
<link href="/media/css/base.css" rel="stylesheet" type="text/css" />
<link href="/media/css/base.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="/admin-media/css/base.css" />
<link rel="stylesheet" type="text/css" href="/admin-media/css/dashboard.css" />

直接访问时http://localhost:8000/admin-media/css/base.css显示来自 Python site-packages/django/contrib/admin/media/css 的 css 文件

直接访问时http://localhost:8000/media/admin-media/css/base.css显示 src/media/admin-media/css/ 中的 css 文件

直接访问时http://localhost:8000/media/css/base.css显示 src/media/css/ 中的 css 文件


对于 Django 1.4 及更高版本很重要(请参阅here https://docs.djangoproject.com/en/dev/releases/1.4/#django-contrib-admin):

从 Django 1.4 开始,管理员的静态文件也遵循此约定,以使文件更易于部署。在 Django 的早期版本中,定义 ADMIN_MEDIA_PREFIX 设置以指向 Web 服务器上管理员静态文件所在的 URL 也很常见。此设置现已被弃用,并由更通用的设置 STATIC_URL 取代。 Django 现在期望在 URL /admin/ 下找到管理静态文件。


之前的答案,对于较旧的 Django 版本:

ADMIN_MEDIA_PREFIX http://docs.djangoproject.com/en/dev/ref/settings/#admin-media-prefix是绝对 URL 前缀,与MEDIA_URL- 两者都可以指向完全不同的点。诚然,名称中“_PREFIX”的(错误)选择在某种程度上表明了这一点。

所以,而不是{{ MEDIA_URL }}{{ADMIN_MEDIA_PREFIX}}css/base.css一定是{% admin_media_prefix %}css/base.css。然后您必须确保 Web 服务器在“/admin-media/”上提供管理媒体文件。

请注意,我使用了admin_media_prefix上面的标签,需要{% load adminmedia %}在模板的开头。不幸的是,常规媒体上下文处理器只为您提供 MEDIA_URL 变量。

为了覆盖普通管理媒体服务,请在 URLconf 中尝试以下操作:

# A handy helper function I always use for site-relative paths
def fromRelativePath(*relativeComponents):
    return os.path.join(os.path.dirname(__file__), *relativeComponents).replace("\\","/")

[...]

url("^admin-media/(?P<path>.*)$",
    "django.views.static.serve",
    {"document_root": fromRelativePath("media", "admin-media")})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Admin Media 前缀 URL 问题 的相关文章

随机推荐