ФорумПрограммированиеPythonDjango → Кастомизация админ-панели

Кастомизация админ-панели

  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 30 апреля 2012 г. 14:52

    Как вобще это происходит? Многое ли можнл изменить? Ибо 70% потребностей однотипны и решаемы тем что есть, а что делать в остальных случаях? Например мне нужно навесить яваскрипт на поля, изменить оформление, поменять поля местами или вставить картинку после поля.
  • Sinkler

    Сообщения: 8096 Репутация: N Группа: в ухо

    Spritz 30 апреля 2012 г. 15:07, спустя 14 минут 40 секунд

    яваскрипт на поля, изменить оформление, поменять поля местами или вставить картинку после поля

    юзаю кастомные вьюхи :D
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 апреля 2012 г. 15:21, спустя 13 минут 45 секунд

    Например мне нужно навесить яваскрипт на поля, изменить оформление, поменять поля местами или вставить картинку после поля.

    без проблем.
    Сапожник без сапог
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 30 апреля 2012 г. 15:23, спустя 2 минуты 29 секунд

    phpdude, например? Ты будешь стебаться, но я делаю похожее расширение для Yii
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 апреля 2012 г. 15:27, спустя 3 минуты 28 секунд


    phpdude, например? Ты будешь стебаться, но я делаю похожее расширение для Yii
    идиот :-)

    проще поменять язык
    Сапожник без сапог
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 30 апреля 2012 г. 15:35, спустя 7 минут 52 секунды

    phpdude, не вижу веской причины, так-то книга по джанге на полке стоит.
  • Sinkler

    Сообщения: 8096 Репутация: N Группа: в ухо

    Spritz 30 апреля 2012 г. 15:51, спустя 16 минут 31 секунду

    у меня тоже много что стоит :D
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 1:46, спустя 9 часов 55 минут 22 секунды

    Например мне нужно навесить яваскрипт на поля, изменить оформление, поменять поля местами или вставить картинку после поля.

    widgets
    Спустя 157 сек.
    from django.contrib import admin
    from colorful.fields import RGBColorField
    from colorful.widgets import ColorFieldWidget
    from kinsburg_tv.films.models import Genre


    class GenreAdmin(admin.ModelAdmin):
    formfield_overrides = {
    RGBColorField: {'widget': ColorFieldWidget},
    }
    list_display = ('name', 'color', )

    admin.site.register(Genre, GenreAdmin)
    adw/0
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 1 мая 2012 г. 4:40, спустя 2 часа 53 минуты 17 секунд

    вот этого я больше всего не понимаю, нахуй делать шаблонизатор, например, что бы потом писать к нему плагины, в один из которых вставлять костыль, что выделить ячейку красным цветом… это ж пиздец как по мне…
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 4:44, спустя 3 минуты 59 секунд


    вот этого я больше всего не понимаю, нахуй делать шаблонизатор, например, что бы потом писать к нему плагины, в один из которых вставлять костыль, что выделить ячейку красным цветом… это ж пиздец как по мне…
    Чего? Ты темой не ошибся?
    Спустя 95 сек.
    Причем тут шаблонизатор вообще? Виджеты филдов относятся к формам, конкретный пример необходим для админки, которая генерируется автоматически
    adw/0
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 1 мая 2012 г. 4:51, спустя 7 минут 46 секунд

    kostyl, не понял причем тут шаблонизатор, но отвечу: вся админ-панель генерируется автоматически, "на лету", значит чтобы исправить что-то в внешнем виде или логике тебе нужны способы кастомизации, перееопределить виджет вывода - помоему интресное решение.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 5:42, спустя 50 минут 29 секунд

    Я просто думаю что kostyl не пользуется скаффолдингом
    adw/0
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 5:12, спустя 23 часа 30 минут 22 секунды

    Можно, кстати и без виджета, если что-то одноразовое:


    class GenreAdmin(admin.ModelAdmin):

    fields = ('red_title', другие поля)
    readonly_fields = ('red_title',)

    def red_title(self, obj):
    return '<div style="color:red">%s</div>' % obj.title
    red_title.allow_tags = True
    red_title.__name__ = 'Красный заголовок'
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 1 мая 2012 г. 6:25, спустя 1 час 12 минут 21 секунду

    А reflection в php 5.2. есть? ПРосто я тоже админ-панели щас штампую всякие разные, до этого на пхп 5.3 в своем старом фреймворке делал на рефлекшне набор функций в админ-панели, генерируемых автоматом, что-то вроде такого:

    private function _getAdministrativeMap()
    {
    if ($bundles = Config::get('admin', 'bundles'))
    {
    $map = array();

    foreach ($bundles as $bundle)
    {
    $map[$bundle] = array();

    foreach (glob("app/logic/$bundle/Solutions/*.php") as $solution)
    {
    $solution = preg_replace('/^(\S+)\.php$/', '$1', basename($solution));

    $map[$bundle][$solution] = array();
    $className = "\\$bundle\\Solutions\\$solution";

    foreach (get_class_methods($className) as $method)
    {
    $reflect = new \ReflectionMethod($className, $method);

    if ($reflect->isPublic())
    {
    $reflectName = $reflect->getName();
    if (strpos($reflectName, '_') !== false) continue;

    if ($phpDoc = $reflect->getDocComment())
    {
    if (Config::get('admin', 'admin_method_only') and
    strpos($phpDoc, '@admin_method') == false) continue;

    preg_match('/@admin_method ([^\n]+)\n/', $phpDoc, $matchData);

    $map[$bundle][$solution][$reflectName]['desc'] =
    (isset($matchData[1])) ? trim($matchData[1]) : '';

    preg_match_all('/@admin_textarea ([^\n]+)\n/', $phpDoc, $matchData);

    $matchData = isset($matchData[1][0]) ? $matchData[1] : array();
    $matchData = array_map('trim', $matchData);
    $map[$bundle][$solution][$reflectName]['textareas'] = $matchData;
    }
    else
    {
    if (Config::get('admin', 'admin_method_only')) continue;
    }

    $map[$bundle][$solution][$reflectName]['p'] = array();

    foreach ($reflect->getParameters() as $param)
    {
    /**
    * @var $param \ReflectionParameter
    */
    if (!$param->isArray())
    {
    $opt = $param->isOptional() ? '_' : '';
    $map[$bundle][$solution]
    [$reflectName]['p'][] = $opt . $param->getName();
    }
    else
    {
    /*
    * Arrays not supported in this version
    */
    unset($map[$bundle][$solution][$reflectName]);

    break;
    }
    }
    }
    }

    if (count($map[$bundle][$solution]) == 0)
    {
    unset($map[$bundle][$solution]);
    }
    }
    }

    return $map;
    }

    return array();
    }
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 1 мая 2012 г. 6:33, спустя 7 минут 51 секунду

    Ivan, это не то. У тебя функции ищутся и выводятся в меню автоматом, а пишешь ты их сам и складываешь в папку. А в джанго весь CRUD действительно создается сам. Причем под "создается" я имею ввиду не исполняемые файлы, а именно результирующий HTML

Пожалуйста, авторизуйтесь, чтобы написать комментарий!