0

我将我的项目组织如下:

myproject/
    urls.py
    settings.py
    views.py
    templates/
    apps/
        __init__.py    <-- needed in order to be identified as a package
        exampleapp/
             __init__.py
             admin.py
             models.py
             urls.py
             views.py
        exampleapp2/
        ...

在我的 settings.py INSTALLED_APPS 中,应用程序的名称为“apps.exampleapp1”、“apps.exampleapp2”,其中带有点 (.) 符号表示模块位于子目录中。根据文档,如果我希望覆盖或扩展应用程序的管理模板,我需要在名为“admin/appname/modelname/”的模板中创建一个目录,但我已经尝试了“admin/apps/exampleapp/”和'admin/apps.exampleapp' 但都不起作用。在 django.contrib.admin 代码的什么地方我可以找到模板是如何被替换的,或者更简单地说,我需要什么目录路径才能扩展或替换管理模板?

4

2 回答 2

0

你如何组织你的应用程序是无关紧要的。该应用程序的名称仍然只是其直接文件夹名称:“exampleapp”或“exampleapp2”。

所以你的管理模板覆盖应该进入“/templates/admin/exampleapp/modelname/”和“/templates/admin/exampleapp2/modelname/”。

于 2012-04-17T21:51:36.927 回答
0

这可能很旧,但我希望这个解决方案可以帮助某人

(Django 1.8.1)

首先在 settings.py 的顶部:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

然后:

将要扩展的管理模板复制到您在 myproject/template 中创建的文件夹

之后,在 setting.py TEMPLATE 中指定目录:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'),],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',],},},]

毕竟我意识到我在我想使用的文件中有这个:

{% extends "admin/base.html" %}

{% block title %}
     {{ title }} | {{ site_title|default:_('My Site') }}
{% endblock %}

{% block branding %}
    <h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Admin Page') }}</a></h1>
{% endblock %}

{% block nav-global %}{% endblock %}

但它一直显示默认的 Django 标题和标题。这些行是我找到解决方案的地方:

{{ 标题 }} | {{ site_title|default:_('我的网站') }}

{{ site_header|default:_('管理页面') }}

一旦我删除了 site_title|default:_site_header|default:_,它就显示了我想要的。

再次,我希望这可以帮助那里的人。

于 2015-05-18T05:50:59.057 回答