gpt4 book ai didi

python - Django Admin Media 前缀 URL 问题

转载 作者:太空狗 更新时间:2023-10-29 21:27:27 25 4
gpt4 key购买 nike

我有以下文件夹结构

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',
)

网址.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):

Starting in Django 1.4, the admin’s static files also follow this convention, to make the files easier to deploy. In previous versions of Django, it was also common to define an ADMIN_MEDIA_PREFIX setting to point to the URL where the admin’s static files live on a Web server. This setting has now been deprecated and replaced by the more general setting STATIC_URL. Django will now expect to find the admin static files under the URL <STATIC_URL>/admin/.


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

ADMIN_MEDIA_PREFIX意味着是一个绝对 URL 前缀,它与 MEDIA_URL 无关 - 两者都可以指向完全不同的点。诚然,名称中“_PREFIX”的(错误)选择在某种程度上暗示了这一点。

因此,{{ MEDIA_URL }}{{ADMIN_MEDIA_PREFIX}}css/base.css 必须是 {% admin_media_prefix %}css/base.css。然后您必须确保网络服务器为“/admin-media/”上的管理媒体文件提供服务。

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

为了覆盖 Vanilla 管理媒体服务,在您的 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")})

关于python - Django Admin Media 前缀 URL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5152026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com