2011-12-28 3 views
8

get_absolute_url() 메소드는 멋지지만 어떤 경우에는 필요하지 않습니다. django.contrib.auth.models.User가 기본적으로 설정되어 있으므로 내 프로젝트의 관리자가 링크가 끊어집니다.Django : 관리자의 "사이트에서보기"버튼을 제거하십시오. User change form

어떻게 그런 일이 발생하지 않도록 할 수 있습니까?

오래된 프로젝트 중 하나에서 버튼의 html을 제거한 맞춤 템플릿을 설정했지만 크기가 조정될 좋은 솔루션처럼 들리지는 않습니다. 더 나은 점이 있나요?

+4

'규모'가 무엇입니까? 수백만 개의 다른 모델에서이 작업을 수행하려고 할 때 어떤 일이 발생할지 걱정됩니까? 템플릿 재정의는 내가 이것을 위해 사용할 솔루션입니다. –

+1

이미 여기에 답변 : http://stackoverflow.com/questions/964868/view-on-site –

답변

1

을 잘 작동합니다.

# 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

1

은 최후의 수단으로, 나는, 나는 그런 이름의 길이, 기본 관리 형태, __unicode__으로 수정하는 더 나은 방법을 발견하지 않은 방법으로 장고의 contrib 응용 프로그램에 내장 된 수정 내 INSTALLED_APPS의 하단에 monkey_patch 응용 프로그램이

장고/일반적으로 업그레이드 할 때 등을 맞댄 다만보십시오.

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

나는이 대답을 받아 들인다. 그러나 나는 그것을 사용하는 것을 아주 좋아하지 않는다. 생각해 줘서 고마워. – nemesisdesign

3

나는 이것이 오래된 것을 알고 있지만, 나는 똑같은 일을해야 할 때가왔다.

accountsINSTALLED_APPS 일 때 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

원숭이 패치 대신 자바 스크립트를 사용하여 클라이언트 측의 버튼을 숨길 수 있습니다. 사이트 버튼의보기의 HTML은 다음과 같습니다

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

당신은 단지 당신이로 나타나는 둥근 버튼의 일부를 얻을 것이다 앵커 태그는 리튬 태그에 적용 숨기면. 불행히도 class, name 또는 id가 없기 때문에 특정 li 태그를 선택하기 위해 CSS를 사용하는 쉬운 방법이 없습니다. 그래서 jquery를 사용하여 셀렉터에 대한 더 많은 제어권을 얻을 수 있습니다. 귀하의 정적 폴더에 다음을 넣으십시오. 위치 정적/관리자의 예를 들어/user_change_form.js

다음이 같은 것을 볼 수 있었다 귀하의 admin.py

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

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

6

Django 1.7 링크를 클릭하면 "더 이상 지원되지 않는 Django의 안전하지 않은 버전입니다. 더 최신 버전으로 업그레이드하십시오!"라는 메시지가 표시됩니다. myapp와의 장고 documentation

에서 언급 한 바와 같이

장고 1.9를 들어, 솔루션을 다음은 장고 1.7으로, 모델 당 /이 수행 할 수 있습니다 admin.py

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

이것이 가장 최근의 최선의 대답입니다. 저는 최근의 프로젝트에서 이것을하고 있습니다. – nemesisdesign

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') 
});