2012-04-17 62 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 |默認:_,它顯示我想要的。

再次,我希望這可以幫助那裏的人。