<p>有很多方法可以将上次访问的非管理员url存储在request.session中。例如,中间件:</p>
<pre><code>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','')
</code></pre>
<p>然后覆盖模板:</p>
<ol>
<li><p><strong>将最后一个非管理url存储在request.session中,例如将上述类放入<code>yourproject/middleware.py</code>,添加到<code>settings.MIDDLEWARE_CLASSES</code>:<code>middleware.LastSiteUrl</code></p></li>
<li><p><strong>准备用于覆盖的管理基站点模板,将<code>django/contrib/admin/templates/admin/base_site.html</code>复制到<code>yourproject/templates/admin/base_site.html</code></p></li>
<li><p><strong>链接到request.session.last_site_url</strong>,例如在<code>yourproject/templates/admin/base_site.html</code>中,找到<code>{% block branding %}</code>,在此块的H1标记之前,向<code>{{ request.session.last_site_url }}</code>添加一个HTML链接。</p></li>
</ol>
<p>应该是这样的:</p>
<pre><code>{% 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 %}
</code></pre>