Django3 (9. django 목록페이지 제목 커스터마이징) feat.페스트캠퍼스

min seung moon·2021년 4월 2일
0

DJANGO3

목록 보기
9/10

각 app의 목록페이지 제목 커스터마이징

01. fcuser의 목록페이지 변경

  • admin.py에 changelist_view 재정의 하기!
from django.contrib import admin
from .models import Fcuser

# Register your models here.


class FcuserAdmin(admin.ModelAdmin):
    # list_display는 튜플 형식으로서 전달하기 때문에 마지막에 꼭 ,를 붙여줘야 한다
    list_display = ('email',)

    # ModelAdmin 내부에 이미 changelist_view함수가 만들어져 있다
    def changelist_view(self, request, extra_context=None):
        # 우리가 원하는 동작을 하고 그 다음에 원래 만들어져 있는 함수를 호출해라
        extra_context = {'title': '사용자 목록'}
        return super().changelist_view(request, extra_context)


admin.site.register(Fcuser, FcuserAdmin)
admin.site.site_header = "패스트캠퍼스"
admin.site.index_title = "패스트캠퍼스"
admin.site.site_title = "패스트캠퍼스"


02 order의 목록페이지 변경

from django.contrib import admin
from .models import Order
# 이스케이프를 안통하게 한다!
# html 이스케이프 때문에 태그를 통한 변경을 불가능하게 함
# format_html 함수를 사용하면 html 태그를 사용할 수 있음
from django.utils.html import format_html

# Register your models here.


class OrderAdmin(admin.ModelAdmin):
    # 하나짜리 튜플을 만들때는 꼭 ,를 붙여줘야 한다
    list_filter = ('status',)
    list_display = ('fcuser', 'product', 'styled_status')

    # 함수로 만들수 도 있다
    # 모델에서 갖고 와서 바로 사용할수 도 있지만 이렇게 함수로도 사용 가능
    def styled_status(self, obj):
        # obj : 레코드
        # f string : python 최신 문법
        # 다양한 문자열 연결
        # 1. + 연결 : '<b>'+obj.status + '</b>'
        # 2. % format : '<b>%s</b>'%(obj.status)
        # 3. format 함수 : '<b>{}</b>'.format(obj.status)
        # 4. f-string : f'<b>{obj.status}</b>'
        if obj.status == '환불':
            return format_html(f'<span style="color:red">{obj.status}</span>')
        if obj.status == '결제완료':
            return format_html(f'<span style="color:green">{obj.status}</span>')
        return format_html(f'<span">{obj.status}</span>')

        # ModelAdmin 내부에 이미 changelist_view함수가 만들어져 있다
    def changelist_view(self, request, extra_context=None):
        # 우리가 원하는 동작을 하고 그 다음에 원래 만들어져 있는 함수를 호출해라
        extra_context = {'title': '주문 목록'}
        return super().changelist_view(request, extra_context)

    styled_status.short_description = '상태'


admin.site.register(Order, OrderAdmin)


03 product의 목록페이지 변경

from django.contrib import admin
from .models import Product
from django.utils.html import format_html
from django.contrib.humanize.templatetags.humanize import intcomma

# Register your models here.


class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'price_format', 'styled_stock')

    def price_format(self, obj):
        price = intcomma(obj.price)
        return f'{price} 원'

    def styled_stock(self, obj):
        stock = obj.stock
        if stock <= 50:
            stock = intcomma(stock)
            return format_html(f'<b style="color:red">{stock} 개</b>')
        return f'{intcomma(stock)} 개'

        # ModelAdmin 내부에 이미 changelist_view함수가 만들어져 있다
    def changelist_view(self, request, extra_context=None):
        # 우리가 원하는 동작을 하고 그 다음에 원래 만들어져 있는 함수를 호출해라
        extra_context = {'title': '상품 목록'}
        return super().changelist_view(request, extra_context)

    price_format.short_description = '가격'
    styled_stock.short_description = '재고'


admin.site.register(Product, ProductAdmin)


profile
아직까지는 코린이!

0개의 댓글