2011-12-28 137 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') 
}); 
相关问题