最簡單的辦法:
如果模型具有get_absolute_url功能,管理員「變」頁面包含一個「現場查看」按鈕在頁面的右上方。因此,請確保您的模型包含get_absolute_url:
def get_absolute_url(self):
return '/myapp/%s' %self.slug #this should reflect your url-structure.
「查看現場」的按鈕不是「添加」頁面上,因爲該對象需要被創建,然後才能訪問它。告訴客戶他/她在創建新對象時不要點擊「保存」,而是點擊「在網站上查看」,然後點擊「保存並繼續編輯」。
現在,通過重寫base_site.html,也可以輕鬆地跳轉到當前模型條目的網站表示形式。在這裏我們檢查當前模型是否包含absolute_url。如果您不在change_page上,則不會有absolute_url。在這種情況下,鏈接會將您帶到主頁。
模板/管理/ base_site.html
{% extends "admin/base.html" %}
{% load i18n %}
{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
{% block branding %}
<h1 id="site-name">{% if has_absolute_url %}<a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% else %}<a href="http://{{ site.domain }}">{% endif %}{{ site.domain }}</a>
Sitebeheer{#{% trans 'Django administration' %}#}</h1>
{% endblock %}
{% block nav-global %}{% endblock %}
完成!
以下解決方案也以不同的方式回答您的問題。這將添加一個「保存和查看現場」按鈕旁邊的「保存並繼續」和「保存」按鈕,在管理員的「添加」和「改變」的網頁:
- 確保您的模型包含get_absolute_url功能。
- 覆蓋管理員響應以重定向到此absolute_url。
- 覆蓋change_form.html以添加「保存並查看網站」按鈕。
編輯的myproject/MYAPP/models.py
class MyModel(models.Model):
title = models.CharField("titel", max_length=200)
slug = models.SlugField(unique=True)
def __unicode__(self):
return self.title
def get_absolute_url(self):
return '/myapp/%s' %self.slug
編輯的myproject/MYAPP/admin.py
from models import MyModel
class MyModelAdmin(admin.ModelAdmin):
...
def response_change(self, request, obj):
"""
Determines the HttpResponse for the change_view stage.
"""
if request.POST.has_key("_viewsite"):
msg = (_('The %(name)s "%(obj)s" was changed successfully.') %
{'name': force_unicode(obj._meta.verbose_name),
'obj': force_unicode(obj)})
return HttpResponseRedirect(obj.get_absolute_url())
return super(MyModel, self).response_change(request, obj)
admin.site.register(MyModel, MyModelAdmin)
創建一個新文件的myproject /模板/管理/ MYAPP/change_form。 html:
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block content %}
{{ block.super }}
<script type="text/javascript">//<![CDATA[
(function($){
$('<input type="submit" value="Save and view on site" name="_viewsite" />')
.prependTo('div.submit-row');
})(django.jQuery);
//]]></script>
{% endblock %}
該模板將覆蓋每個模型的change_form i在myapp中。在您的情況下,這可能是不受歡迎的,因爲並非所有模型都在網站中有一個表示(沒有和不需要get_absolute_url)。我想你也可以將模板放在myproject/templates/admin/myapp/MyModel /change_form.html中,以便僅覆蓋MyModel的模板,並使用默認模板在myapp中保留其他模型。我從來沒有使用過一個模型的change_form模板。你能告訴我它是否有效嗎?
非常感謝您:http://djangosnippets.org/snippets/2005/
這個回答你的問題?我希望它有幫助。
request.session有幫助 – okm 2012-03-26 14:35:42
感謝您的反饋(答案更新) – jpic 2012-03-26 14:59:59
不客氣。很高興看到改進的答案並從中學習=) – okm 2012-03-26 15:34:39