Lar*_*ell 12 python django django-admin
我的客户端有一个用django构建的应用程序.在他们的应用程序的每个页面上都有一个指向其管理站点的链接 他们告诉我管理站点完全由django生成,他们以前从未定制过.在管理页面的第一行,它说:
Django administration Welcome, admin. Change password / Log out
他们希望我在"Django管理"的左侧添加一个指向该行的链接,当他们点击链接将他们带到管理站点时,会将他们带回到他们所在的页面.
所以我在这里有2个问题:
如何覆盖该行以添加链接?该页面似乎是由contrib/admin/templates/admin/base.html生成的,我尝试按照https://docs.djangoproject.com/en/1.2/ref/contrib/admin/上的说明覆盖它 #overriding-a ...,但无论我做什么似乎都没有效果.
如何获取他们来自的应用页面的链接?这不仅仅是回到一个页面,因为他们可以在点击"返回应用程序"链接之前在管理站点的各个位置进行导航.
jpi*_*pic 13
有很多方法可以将最后访问过的非管理员网址存储在request.session中.例如,一个中间件:
import re
class LastSiteUrl(object):
def is_admin_url(self, url):
return re.search('^(http:\/\/.*){0,1}\/admin\/', url) is not None
def process_request(self, request):
if self.is_admin_url(request.path) and \
not self.is_admin_url(request.META.get('HTTP_REFERER','')):
request.session['last_site_url'] = request.META.get('HTTP_REFERER','')
Run Code Online (Sandbox Code Playgroud)
然后覆盖模板:
将最后一个非管理员URL存储在request.session中,例如将上面的类放入yourproject/middleware.py,添加到settings.MIDDLEWARE_CLASSES:middleware.LastSiteUrl
准备管理基础站点模板以覆盖,复制django/contrib/admin/templates/admin/base_site.html到yourproject/templates/admin/base_site.html
链接到request.session.last_site_url,例如在yourproject/templates/admin/base_site.htmlfind中{% block branding %},在此块的H1标记之前添加HTML链接{{ request.session.last_site_url }}.
看起来应该是这样的:
{% block branding %}
{% if request.session.last_site_url %}
<a href="{{ request.session.last_site_url }}">back to site</a>
{% endif %}
<h1 id="site-name">{% trans 'Django administration' %}</h1>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)