Django:删除管理员中的“查看现场”按钮用户更改表格
get_absolute_url()方法很酷,但在某些情况下不需要。 django.contrib.auth.models.User在默认情况下设置了它,这会导致我的项目在管理中有一个断开的链接。Django:删除管理员中的“查看现场”按钮用户更改表格
我该如何防止这种情况发生?
在我的一个旧项目中,我设置了一个自定义模板,在该模板中删除了按钮的html,但听起来不像是一个可以缩放的好方案。有什么更好的?
这是可以做到,每个模型,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)
这是最近最好的答案:-) – nemesisdesign 2017-07-04 09:46:41
作为最后的手段,我有我的INSTALLED_APPS
它修改了内置的方式Django的contrib请应用底部的monkey_patch
程序,我还没有找到更好的方法来修改,如用户名长度,默认的admin形式,__unicode__
,等等
当你升级django /一般时,只需要看你的背部。
from django.contrib.auth.models import User
del User.get_absolute_url
我接受这个答案,但我不那么热衷于使用它。 (还是)感谢你的建议。 – nemesisdesign 2012-01-19 15:40:44
我知道这是旧的,但当我必须做同样的事情时我碰到它。
如果您有,更好的解决方案是将猴子修补到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)
而不是猴子补丁你可以隐藏客户端使用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它可以让你不显示“查看现场”链接。
感谢您的更新! – nemesisdesign 2017-05-04 13:50:04
如果你点击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
这是最近的最佳答案,我在我最近的项目中这样做。 – nemesisdesign 2017-03-01 09:33:16
我使用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')
});
你是什么意思'规模'?你是否担心当你想在数百万种不同的模型上做这件事会发生什么?模板覆盖正是我为此所用的解决方案。 – 2011-12-29 00:03:33
已经在这里解答:http://stackoverflow.com/questions/964868/view-on-site – 2011-12-29 12:38:29