Django: Удалите кнопку «просмотр на сайте» в форме изменения прав администратора. - PullRequest
10 голосов
/ 29 декабря 2011

Метод get_absolute_url () классный, но в некоторых случаях не требуется. У django.contrib.auth.models.User он установлен по умолчанию, поэтому мои проекты имеют неработающую ссылку в администраторе.

Как я могу предотвратить это?

В одном из моих старых проектов я установил пользовательский шаблон, в котором я удалил html кнопки, но это не похоже на хорошее решение, которое масштабируется, хотя. Что-нибудь лучше?

Ответы [ 7 ]

7 голосов
/ 01 марта 2017

Если вы нажмете на ссылку Django 1.7, сайт сообщит вам, что «это небезопасная версия Django, которая больше не поддерживается. Пожалуйста, обновите ее до новой версии!»

Для Django 1.9 следующее решение отлично работает, как указано в документации Django

в myapp / admin.py

from django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
    # Disable View on Site link on admin page
    site_url = None
4 голосов
/ 22 июня 2014

Вместо исправления обезьяны вы можете скрыть кнопку на стороне клиента, используя JavaScript. HTML-код кнопки просмотра на сайте выглядит следующим образом:

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

Если вы просто скроете тег привязки, вы получите часть круглой кнопки, которая будет отображаться так, как она применяется к тегу li. К сожалению, сейчас нет простого способа использовать css для выбора этого конкретного тега li, так как у него нет класса, имени или идентификатора. Таким образом, мы можем использовать 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)

UPDATE

В Django 1.7 была добавлена ​​функция * ModelAdmin.view_on_site , которая позволяет не отображать ссылку «Просмотр на сайте».

3 голосов
/ 28 августа 2012

Я знаю, что это старо, но я столкнулся с этим, когда мне пришлось сделать то же самое.

Лучшим решением было бы обезьянить патч в файле 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)
2 голосов
/ 20 июня 2017

Это можно сделать для каждой модели начиная с версии 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)
1 голос
/ 29 декабря 2011

В крайнем случае, у меня есть приложение monkey_patch в нижней части моего INSTALLED_APPS, которое модифицирует встроенные приложения Django Contribu таким образом, что я не нашел лучших способов изменить, таких как длина имени пользователя, формы администратора по умолчанию __unicode__ и т. Д.

Просто следите за своей спиной при обновлении django / в целом.

from django.contrib.auth.models import User
del User.get_absolute_url
0 голосов
/ 22 мая 2018

используйте admin.site.site_url = "ваш URL здесь" в url.py вашего основного приложения, чтобы изменить "посещение сайта" на странице django и удаление "view_on_site" использование view_on_site = False в вашем классе с display_list для

0 голосов
/ 16 августа 2017

Я использую 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')
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...