簡単な方法をページの右上にあります。あなたはそれを訪問することができます前に、オブジェクトを作成する必要があるため
def get_absolute_url(self):
return '/myapp/%s' %self.slug #this should reflect your url-structure.
「ビューサイト上」ボタンは、「追加」ページではありません:だから、あなたのモデルはget_absolute_url含まれていることを確認してください。新しいオブジェクトを作成して「保存」をクリックしないで「保存して編集を続行」し、「サイトで表示」をクリックするよりも、クライアントに伝えてください。
これで、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 %}
テンプレートは、モデルiごとにchange_formを上書きしますn myapp。あなたの状況では、すべてのモデルがWebサイトに表現されているわけではありません(get_absolute_urlを持たないため、get_absolute_urlは必要ありません)。私は、テンプレートをmyproject/templates/admin/myapp/MyModel /change_form.htmlに置くことで、MyModelのテンプレートをオーバーライドし、他のモデルをデフォルトのテンプレートでmyappに残すこともできると思います。私は、単一のモデルに対してchange_formテンプレートを使用したことはありません。それが働いたら教えてくれますか?
大きいが、ありがとうございました:http://djangosnippets.org/snippets/2005/
この回答はお役に立ちましたか?私はそれが助けて欲しい
request.session help – okm
あなたのご意見ありがとうございます(回答が更新されました) – jpic
よろしくお願いいたします。改善された答えを見てそれから学ぶのは良いことです=) – okm