2012-04-17 63 views
0

我安排我的项目如下所示:更换Django管理模板和应用程序在子目录

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”用点(。)标记表示模块在子目录中。根据documentation,如果我想覆盖或扩展应用程序的管理模板,我需要在名为'admin/appname/modelname /'的模板中创建一个目录,但我已经尝试了'admin/apps/exampleapp /'和'admin/apps.exampleapp',但都不起作用。在django.contrib.admin代码中,我可以找到替换模板的方式,或者更简单地说,为了扩展或替换管理模板,需要具备哪种目录路径?

回答

0

如何组织您的应用程序是无足轻重的。该应用程序的名称仍然是它的直接文件夹名称:“exampleapp”或“exampleapp2”。

因此,您的管理模板覆盖应该放在“/ templates/admin/exampleapp/modelname /”和“/ templates/admin/exampleapp2/modelname /”中。

0

这可能是老了,但我希望这个解决方案帮助别人

(Django的1.8.1)

首先,在您的settings.py的顶部:

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

然后:

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

这样做后,指定的目录中setting.py模板:

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标题和标题。 这些行是我找到解决方案的地方:

{{title}} | {{SITE_TITLE |默认:_( '我的网站')}}

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

只要我删除SITE_TITLE |默认:_site_header |默认:_,它显示我想要的。

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