Простой способ:
Если модель имеет функцию 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. Если вы не находитесь на странице изменений, не будет абсолютного индекса. В этом случае ссылка ведет на домашнюю страницу.
шаблоны / админ / 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 %}
Готово! * * 1013
Следующее решение также ответит на ваш вопрос, но по-другому. Это добавит кнопку «сохранить и просмотреть на сайте» рядом с кнопками «сохранить и продолжить» и «сохранить» на страницах администратора «добавить» и «изменить»:
- Убедитесь, что ваша модель содержит функцию 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 / templates / admin / 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 для каждой модели в myapp. Это может быть нежелательно в вашей ситуации, потому что не все модели имеют представление на веб-сайте (не имеют и не нуждаются в get_absolute_url). Я думаю, вы также можете поместить шаблон в myproject / templates / admin / myapp / MyModel / change_form.html, чтобы переопределить только шаблон для MyModel и оставить другие модели в myapp с шаблоном de default. Я никогда не использовал шаблон change_form для одной модели. Вы дадите мне знать, сработало ли это?
Большое спасибо за: http://djangosnippets.org/snippets/2005/
Это ответило на ваш вопрос? Надеюсь, это поможет.