장고의 관리자 사이트를 조금 개조하고 싶었던 이야기

3082 단어 메모파이썬장고

하고 싶었던 일


  • 선택한 list_filter를 일괄 클리어하는 버튼을 list_filter 제목 옆에 배치하고 싶습니다.


  • 방법


  • 템플릿의 "Change_list.html"을 재정의
  • app 구성
  • C:Project Name
    │  db.sqlite3
    │  manage.py
    │  
    ├─.idea
    │      
    ├─Project Name
    │  │  authentication.py
    │  │  settings.py
    │  │  urls.py
    │  │  utils.py
    │  │  wsgi.py
    │  │  __init__.py
    │  │  
    │  ├─locate
    │  └─__pycache__
    │          
    ├─App Name
    │  │  admin.py
    │  │  apps.py
    │  │  context_processors.py
    │  │  forms.py
    │  │  models.py
    │  │  tests.py
    │  │  urls.py
    │  │  views.py
    │  │  __init__.py
    │  │  
    │  ├─locate
    │  ├─migrations
    │  │  └─__pycache__
    │  ├─templatetags
    │  │  │  mytag.py
    │  │  │  
    │  │  └─__pycache__
    │  │          mytag.cpython-37.pyc
    │  │          
    │  └─__pycache__
    │          
    ├─templates
      │  __init__.py
      │  
      └─admin
          │  base_site.html
          │  index.html
          │  __init__.py
          │  
          └─App Name
              │  change_form_help_text.html
              │  change_list.html          ←このファイルを追加
              │  __init__.py
              │  
              ├─model name1
              │      change_form.html
              │      __init__.py
              │      
              └─model name2
                      change_form.html
                      __init__.py
    
  • Change_list.html

  • 다음과 같이 재정의

    Change_list.html
    {% extends 'admin/change_list.html' %}
    {% load admin_list %}
    {% search_form cl %}
    {% load i18n %}
    {{ block.super }}
    
      {% block filters %}
        {% if cl.has_filters %}
          <div id="changelist-filter">
              <h2>{% trans 'Filter' %} <button id="clear" onclick="location.href=location.href.replace(/\#.*$/, '').replace(/\?.*$/, '');">clear</button></h2>
            {% if cl.has_active_filters %}<h3 id="changelist-filter-clear">
              <a href="{{ cl.clear_all_filters_qs }}">&#10006; {% trans "Clear all filters" %}</a>
            </h3>{% endif %}
            {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
          </div>
        {% endif %}
      {% endblock %}
    

    결과


  • list_filter의 해제 자체는 추가 된 버튼을 클릭했을 때 현재 url에서 검색 쿼리를 뺀 url을 재설정함으로써 실현되었습니다.
  • Template를 재정의하는 방법을 알면 admin 사이트를 조금 수정하는 데 유용합니다
  • 좋은 웹페이지 즐겨찾기