get_absolute_url()方法很酷,但在某些情况下不需要。 django.contrib.auth.models.User默认设置它,这导致我的项目在管理员中有一个断开的链接。
如何防止这种情况发生?
在我的一个旧项目中,我设置了一个自定义模板,在该模板中我删除了按钮的html,它听起来不像是一个可扩展的好解决方案。还有什么更好的吗?
答案 0 :(得分:7)
如果你点击Django 1.7链接,该网站会告诉你“它不再支持Django的不安全版本。请升级到更新版本!”
对于Django 1.9,以下解决方案正常工作,如Django documentation
中所述在myapp / admin.py
中from django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
# Disable View on Site link on admin page
site_url = None
答案 1 :(得分:4)
您可以使用JavaScript隐藏客户端上的按钮,而不是猴子修补。站点视图的HTML按钮如下所示:
<li><a href="/admin/r/4/2/" class="viewsitelink">View on site</a></li>
如果您只是隐藏锚标记,您将获得圆形按钮的一部分,因为它已应用于li标记。现在很遗憾没有简单的方法可以使用css来选择特定的li标签,因为它没有类,名称或ID。因此我们可以使用jquery,它可以让您更好地控制选择器。将以下内容放在静态文件夹中。例如,在位置static / admin / user_change_form.js
中django.jQuery( document ).ready(function($) {
$(".viewsitelink").parent().css('display', 'none')
});
您的admin.py可能看起来像这样:
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)
<强>更新强>
Django 1.7 ModelAdmin.view_on_site中添加了一项功能,可让您无法显示“网站上的视图”链接。
答案 2 :(得分:3)
我知道这已经老了,但是当我不得不做同样的事情时,我遇到了它。
当accounts/admin.py
中有accounts
时,更好的解决方案是在INSTALLED_APPS
文件中对其进行修补。
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)
答案 3 :(得分:2)
根据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)
答案 4 :(得分:1)
作为最后的手段,我在monkey_patch
底部有一个INSTALLED_APPS
应用,它修改了内置的django contrib应用,我没有找到更好的方法来修改,例如用户名长度,默认管理表单,__unicode__
等
一般情况下升级django /时,请注意。
from django.contrib.auth.models import User
del User.get_absolute_url
答案 5 :(得分:1)
Django 2.0 以上可以添加默认管理员
admin.site.site_url = None
以上技巧对我非常有效。
答案 6 :(得分: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')
});
答案 7 :(得分:0)
使用 admin.site.site_url =&#34;您的网址在这里&#34; 在你的主应用程序的url.py中修改django页面上的&#34;访问网站&#34; 和 对于&#34; view_on_site&#34;除去强> 使用 在您的类中使用
的display_list view_on_site = False