python - site - how to create a django project




如何覆蓋和擴展基本的Django管理模板? (6)

Chengs的回答是正確的,但根據管理員文檔,並不是每個管理模板都可以這樣覆蓋: https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#overriding-admin-templates ://docs.djangoproject.com/en/1.9/ref/contrib/admin/#overriding-admin-templates

可能會覆蓋每個應用程序或模型的模板

並非每個應用程序或每個模型都會覆蓋contrib / admin / templates / admin中的所有模板。 以下內容可以:

app_index.html
change_form.html
change_list.html
delete_confirmation.html
object_history.html

對於那些無法以這種方式覆蓋的模板 ,您可能仍然會覆蓋整個項目的模板 。 只需新版本放入您的模板/管理員目錄即可。 這對創建自定義404和500頁特別有用

我不得不覆蓋管理員的login.html,因此必須將覆蓋的模板放在這個文件夾結構中:

your_project
 |-- your_project/
 |-- myapp/
 |-- templates/
      |-- admin/
          |-- login.html  <- do not misspell this

(沒有管理員中的myapp子文件夾)我沒有足夠的評論來評論程的帖子,這就是為什麼我不得不把這寫成新的答案。

如何覆蓋管理模板(例如admin / index.html),同時對其進行擴展(請參閱https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template )?

首先 - 我知道這個問題之前已經被詢問和回答過了(請參閱Django:覆蓋和擴展應用程序模板 ),但正如答案所述,如果您使用的是app_directories模板加載器(這是大多數時間)。

我目前的解決方法是複制並擴展它們,而不是直接從管理模板中進行擴展。 這很好用,但是當管理員模板發生變化時,它會讓人感到困惑,並增加額外的工作量。

它可以為模板考慮一些自定義的擴展標籤,但如果已經存在解決方案,我不想重新發明輪子。

在旁注:有人知道Django本身是否會解決這個問題嗎?


This網站有一個簡單的解決方案,用我的Django 1.7配置。

FIRST:在項目的模板/目錄中將名為admin_src的符號鏈接添加到已安裝的Django模板中。 對於我使用virtualenv的Dreamhost,我的“源代碼”Django管理模板位於:

~/virtualenvs/mydomain/lib/python2.7/site-packages/django/contrib/admin/templates/admin

SECOND:在模板/

所以我的項目的模板/目錄現在看起來像這樣:

/templates/
   admin
   admin_src -> [to django source]
   base.html
   index.html
   sitemap.xml
   etc...

THIRD:在你的新模板/ admin /目錄下創建一個包含以下內容的base.html文件:

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

{% block extrahead %}
<link rel='shortcut icon' href='{{ STATIC_URL }}img/favicon-admin.ico' />
{% endblock %}

第四:將您的管理員favicon-admin.ico添加到您的靜態根img文件夾中。

完成。 簡單。


你可以使用django-overextends ,它為Django提供循環模板繼承。

它來自Mezzanine CMS,從Stephen提取它到獨立的Django擴展。

您可以在Mezzanine文檔中的“覆蓋vs擴展模板”(http:/mezzanine.jupo.org/docs/content-architecture.html#overriding-vs-extending-templates)中找到更多信息。

有關更深層次的內容,請參閱Stephens博客“Django的循環模板繼承”(http:/blog.jupo.org/2012/05/17/circular-template-inheritance-for-django)。

並在Google Groups中討論(https:/groups.google.com/forum/#!topic / mezzanine-users / sUydcf_IZKQ),開始開發此功能。

注意:

我沒有聲望添加超過2個鏈接。 但我認為這些鏈接提供了有趣的背景信息。 所以我剛剛在“http(s):”之後留下了斜線。 也許某個聲譽較好的人可以修復鏈接並刪除該註釋。


如果您需要覆蓋admin/index.html ,則可以設置index_template參數。

例如

# urls.py
...
from django.contrib import admin

admin.site.index_template = 'admin/my_custom_index.html'
admin.autodiscover()

並將您的模板放置在<appname>/templates/admin/my_custom_index.html


最好的方法是將Django管理模板放入您的項目中。 所以你的模板將在templates/admin而股票Django的管理模板將在說template/django_admin 。 然後,你可以做如下的事情:

模板/管理/ change_form.html

{% extends 'django_admin/change_form.html' %}

Your stuff here

如果您擔心讓庫存模板保持最新狀態,可以使用svn externals或類似軟件包括它們。






django-admin