添加到django管理页面的链接

Lar*_*ell 12 python django django-admin

我的客户端有一个用django构建的应用程序.在他们的应用程序的每个页面上都有一个指向其管理站点的链接 他们告诉我管理站点完全由django生成,他们以前从未定制过.在管理页面的第一行,它说:

Django administration          Welcome, admin. Change password / Log out

他们希望我在"Django管理"的左侧添加一个指向该行的链接,当他们点击链接将他们带到管理站点时,会将他们带回到他们所在的页面.

所以我在这里有2个问题:

  1. 如何覆盖该行以添加链接?该页面似乎是由contrib/admin/templates/admin/base.html生成的,我尝试按照https://docs.djangoproject.com/en/1.2/ref/contrib/admin/上的说明覆盖它 #overriding-a ...,但无论我做什么似乎都没有效果.

  2. 如何获取他们来自的应用页面的链接?这不仅仅是回到一个页面,因为他们可以在点击"返回应用程序"链接之前在管理站点的各个位置进行导航.

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)

然后覆盖模板:

  1. 将最后一个非管理员URL存储在request.session中,例如将上面的类放入yourproject/middleware.py,添加到settings.MIDDLEWARE_CLASSES:middleware.LastSiteUrl

  2. 准备管理基础站点模板以覆盖,复制django/contrib/admin/templates/admin/base_site.htmlyourproject/templates/admin/base_site.html

  3. 链接到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)