get_absolute_url()方法很酷,但在某些情況下不需要。 django.contrib.auth.models.User在默認情況下設置了它,這會導致我的項目在管理中有一個斷開的鏈接。Django:刪除管理員中的「查看現場」按鈕用戶更改表格
我該如何防止這種情況發生?
在我的一箇舊項目中,我設置了一個自定義模板,在該模板中刪除了按鈕的html,但聽起來不像是一個可以縮放的好方案。有什麼更好的?
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