Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

6.6 Добавление в проект Bootstrap 5
4 из 4 шагов пройдено

И завершающий штрих, сделаем так, что-бы нажатая кнопка сортировки становилась неактивной.


Добавим новый класс disabled-button, для неактивных кнопок сортировки, в файл static\base.css:

/* Отключает кнопки сортировки. */
.disabled-button {
      opacity: 0.5;
      pointer-events: none;
 }


Добавим новые классы *-ascend и *-descend для кнопок сортировки в файл templates\base.html.

И туда-же добавим класс disabled-button для кнопки сортировки по-возрастанию номера книги.

По-умолчанию эта кнопка будет заблокирована - так-как список книг изначально выводится именно так.

                            <!-- Заголовок номера книги -->
                            <th scope="col" style="width: 10%" class="text-center">
                                <small>
                                    No.
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='id' direction='ascend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-down-square ms-1 id-ascend disabled-button"></i>
                                    </a>
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='id' direction='descend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-up-square id-descend"></i>
                                    </a>
                                </small>
                            </th>

                            <!-- Заголовок названия книги -->
                            <th scope="col" style="width: 26%" class="text-center">
                                <small>
                                    Title
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='title' direction='ascend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-down-square ms-1 title-ascend"></i>
                                    </a>
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='title' direction='descend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-up-square title-descend"></i>
                                    </a>
                                </small>
                            </th>

                            <!-- Заголовок автора книги -->
                            <th scope="col" style="width: 26%" class="text-center">
                                <small>
                                    Author
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='author' direction='ascend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-down-square ms-1 author-ascend"></i>
                                    </a>
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='author' direction='descend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-up-square author-descend"></i>
                                    </a>
                                </small>
                            </th>

                            <!-- Заголовок цены книги -->
                            <th scope="col" style="width: 11%" class="text-center">
                                <small>
                                    Price ($)
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='price' direction='ascend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-down-square ms-1 price-ascend"></i>
                                    </a>
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='price' direction='descend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-up-square price-descend"></i>
                                    </a>
                                </small>
                            </th>

                            <!-- Заголовок статуса книги -->
                            <th scope="col" style="width: 11%" class="text-center">
                                <small>
                                    Status
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='read' direction='descend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-down-square ms-1 read-descend"></i>
                                    </a>
                                    <a href=""
                                       hx-get="{% url 'book_list_sort' filter='read' direction='ascend' %}"
                                       hx-target="#book-list"
                                       hx-swap="innerHTML" >
                                        <i class="table-icon bi bi-arrow-up-square read-ascend"></i>
                                    </a>
                                </small>
                            </th>


Там-же доработаем код для блокировки-разблокировки кнопок сортировки:

    <script>
        function cngElementsAtr(cls, atr, val){
            var elems = document.getElementsByClassName(cls);
            for(var i = 0; i < elems.length; i++) {
                elems[i][atr] = val;
            }
        }
        document.body.addEventListener('htmx:afterRequest', (event) => {
            path_str = event.detail.pathInfo.requestPath;
            if(path_str.includes('create_book')){
                cngElementsAtr('clrtxt', 'value', '');
            }else if(path_str.includes('update_book_details')){
                if(event.detail.requestConfig.verb === 'put'){
                    cngElementsAtr('disbtn', 'disabled', true);
                }else{
                    cngElementsAtr('disbtn', 'disabled', false);
                }
            }else if(path_str.includes('book_detail')){
                cngElementsAtr('disbtn', 'disabled', false);
            }else if(path_str.includes('book_list_sort')){
                path_arr = path_str.split('/');
                path_arr.pop()
                curr_class = path_arr.pop()
                curr_class = path_arr.pop() + '-' + curr_class
                document.getElementsByClassName('disabled-button')[0].classList.remove('disabled-button');
                document.getElementsByClassName(curr_class)[0].classList.add('disabled-button');
            }
        });
    </script>

 

В следующем модуле рассмотрим добавление интернационализации и локализации в данный проект.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

тут путаница какаЯ то ( нет примера как оно должно быть и этим не понятно (


при изменении выше указаны кнопка не заблокирована ( или я чего то не понял (

По-умолчанию эта кнопка будет заблокирована - так-как список книг изначально выводится именно так.
 

Добавим новые классы *-ascend и *-descend для кнопок сортировки в файл templates\base.html.

И туда-же добавим класс disabled-button для кнопки сортировки по-возрастанию номера книги.

По-умолчанию эта кнопка будет заблокирована - так-как список книг изначально выводится именно так.

 

@No_Name, теперь все гуд, опять попался на кэш ((( всегда забываю что при использовании CSS  надо кеш чистить все гуд

Изменен No Name