我有一个客户端有一个用 django 构建的应用程序。在每一页上 他们的应用程序是指向他们管理站点的链接。他们告诉我管理网站 完全由 django 生成,他们从未对其进行定制 前。在管理页面的第一行,它说:
Django administration Welcome, admin. Change password / Log out
他们要我在“Django”的左侧添加到该行的链接 administration”,这将使他们返回到他们所在的页面 他们点击链接进入管理网站。
所以我这里有两个问题:
如何覆盖该行以添加链接?出现那个页面 由contrib/admin/templates/admin/base.html生成,我试过了 按照以下指示覆盖它 https://docs.djangoproject.com/en/1.2/ref/contrib/admin/#overriding-a ..., 但无论我做什么似乎都没有效果。
如何获取他们来自的应用程序页面的链接?它是 不仅仅是返回一页,因为他们可以浏览所有页面 在单击“返回应用程序”之前先在管理站点的位置 链接。
最佳答案
request.session 中有很多方法可以存储上次访问的非管理员 url。比如一个中间件:
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','')
然后覆盖模板:
将最后一个非管理员 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.html
中,找到{% block branding %}
,在这个block的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 %}
关于python - 添加链接到 django 管理页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873582/