处理弃用的`adminmedia`模板标签和{% admin_media_prefix %}的合适方法

24

从django 1.5版本开始,https://docs.djangoproject.com/en/1.5/releases/1.5/#miscellaneous

模板标签库adminmedia已被移除,其中只包含了已弃用的模板标签{% admin_media_prefix %}。尝试使用{% load adminmedia %}加载它将会失败。如果你的模板仍然包含这一行代码,你必须删除它。

那么,在我的旧版库和项目中,仍然使用{% load adminmedia %}并像下面这样加载css文件,应该采取什么适当的方式替换代码呢?

<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/login.css">

?

2个回答

24
自Django 1.3以来,您可以使用django.contrib.staticfiles应用程序。
请确保在您的INSTALLED_APPS中包含django.contrib.staticfiles,并在settings.py中指定STATIC_ROOT和STATIC_URL选项。
然后运行manage.py collectstatic命令,所有应用程序的静态文件都将收集到STATIC_ROOT文件夹中。
在模板中,您可以使用{{ STATIC_URL }}上下文变量(请确保在TEMPLATE_CONTEXT_PROCESSORS中包含django.core.context_processors.static)或{% static %}模板标签。
<link href="{{ STATIC_URL }}admin/css/login.css" rel="stylesheet">

或者

{% load staticfiles %}
<link href="{% static 'admin/css/login.css' %}" rel="stylesheet">

我正在查找 STATIC_PATH 的文档,但是没有找到任何内容,这应该是 STATIC_ROOT 吗? - wobbily_col
@wobbily_col,你对STATIC_ROOT的理解是正确的,我已经提交了这个答案的编辑(正在等待同行审核)。 - Stefan Magnuson
将这些文件拉入您自己的项目中真的是推荐的解决方案吗?听起来像是一个hack。 - knipknap

5

我只是复制了 base.css 中的内容:

{% load admin_static %}

然后

<link href="{% static 'admin/css/base.css' %}" rel="stylesheet">

(将base.css替换为您需要的任何内容,例如在您的情况下使用login.css

确保您的INSTALLED_APPS中有django.contrib.staticfiles

(我不需要像Anton之前建议的那样配置STATIC_ROOT并运行manage.py collectstatic


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接