2011-12-28 231 views
8

get_absolute_url()方法很酷,但在某些情況下不需要。 django.contrib.auth.models.User在默認情況下設置了它,這會導致我的項目在管理中有一個斷開的鏈接。Django:刪除管理員中的「查看現場」按鈕用戶更改表格

我該如何防止這種情況發生?

在我的一箇舊項目中,我設置了一個自定義模板,在該模板中刪除了按鈕的html,但聽起來不像是一個可以縮放的好方案。有什麼更好的?

+4

你是什麼意思'規模'?你是否擔心當你想在數百萬種不同的模型上做這件事會發生什麼?模板覆蓋正是我爲此所用的解決方案。 – 2011-12-29 00:03:33

+1

已經在這裏解答:http://stackoverflow.com/questions/964868/view-on-site – 2011-12-29 12:38:29

回答

1

這是可以做到,每個模型,Django的1.7。

# myapp/admin.py 
from django.contrib import admin 
from myapp.models import MyModel 

class MyModelAdmin(admin.ModelAdmin): 
    view_on_site = False 

admin.site.register(MyModel,MyModelAdmin) 
+0

這是最近最好的答案:-) – nemesisdesign 2017-07-04 09:46:41

1

作爲最後的手段,我有我的INSTALLED_APPS它修改了內置的方式Django的contrib請應用底部的monkey_patch程序,我還沒有找到更好的方法來修改,如用戶名長度,默認的admin形式,__unicode__,等等

當你升級django /一般時,只需要看你的背部。

from django.contrib.auth.models import User 
del User.get_absolute_url 
+0

我接受這個答案,但我不那麼熱衷於使用它。 (還是)感謝你的建議。 – nemesisdesign 2012-01-19 15:40:44

3

我知道這是舊的,但當我必須做同樣的事情時我碰到它。

如果您有,更好的解決方案是將猴子修補到accounts/admin.py文件中。

admin.site.unregister(User) 
# We don't want a broken View on Site link. Thanks for that, contrib.auth! 
del User.get_absolute_url 
admin.site.register(User, MyUserAdmin) 
4

而不是猴子補丁你可以隱藏客戶端使用JavaScript的按鈕。現場按鈕視圖的HTML看起來像這樣:

<li><a href="/admin/r/4/2/" class="viewsitelink">View on site</a></li> 

如果你只是隱藏錨標記,你會得到顯現爲圓形按鈕的一部分,在L1標籤應用。現在不幸的是,沒有簡單的方法可以使用css來選擇特定的li標籤,因爲它沒有類,名稱或id。所以我們可以使用jQuery來讓您更好地控制選擇器。將以下內容放入靜態文件夾中。例如,在位置靜態/管理/ user_change_form.js

django.jQuery(document).ready(function($) { 
    $(".viewsitelink").parent().css('display', 'none') 
}); 

你admin.py然後可能看起來像這樣:

一個特點是在Django加入

from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.admin import site 

class CustomUserAdmin(UserAdmin): 
    class Media: 
     js = ['admin/user_change_form.js'] 

site.unregister(User) 
site.register(User, CustomUserAdmin) 

UPDATE 1.7 ModelAdmin.view_on_site它可以讓你不顯示「查看現場」鏈接。

+0

感謝您的更新! – nemesisdesign 2017-05-04 13:50:04

6

如果你點擊Django 1.7鏈接,網站會告訴你「它是一個不再受支持的不安全的Django版本,請升級到更新的版本!」

Django的1.9,以下解決方案如在MYAPP Django的documentation

提到/正常工作admin.py

from django.contrib.admin import AdminSite 
class MyAdminSite(AdminSite): 
    # Disable View on Site link on admin page 
    site_url = None 
+0

這是最近的最佳答案,我在我最近的項目中這樣做。 – nemesisdesign 2017-03-01 09:33:16

0

我使用Django 1.4和Marwan Alsabbagh的解決方案對我來說工作得很好。雖然在打開/刷新用戶更改表單時短暫閃爍。這是因爲JQuery僅在加載頁面時才隱藏此按鈕。

爲了解決這個小問題,我使用CSS來隱藏整個.change-form塊。加載頁面後,該塊的可見性將通過JQuery恢復。所以,我的代碼如下所示:

admin.py:

class Media: 
    js = ['js/admin/user_change_form.js'] 
    css = {'all': ('css/admin/user_change_form.css',)} 

...靜態/ CSS /管理/ user_change_form.css

.change-form { 
    visibility: hidden; 
} 

...靜態/ JS /管理/user_change_form.js

/* Do not show 'View on site' button in User change form */ 
django.jQuery(document).ready(function($) { 
    $(".viewsitelink").parent().css('display', 'none') 
    /* restore visibility of the page (hidden in css to avoid blinking) */ 
    $(".change-form").css('visibility', 'visible') 
}); 
相關問題