programing

Django 관리자의 필드에 클릭 가능한 링크를 추가하는 방법은 무엇입니까?

minecode 2021. 1. 17. 10:47
반응형

Django 관리자의 필드에 클릭 가능한 링크를 추가하는 방법은 무엇입니까?


이 admin.py가 있습니다.

class LawyerAdmin(admin.ModelAdmin):
    fieldsets = [
        ('Name',   {'fields': ['last', 'first', 'firm_name', 'firm_url', 'school', 'year_graduated']}),
    ]
    list_display = ('last', 'first', 'school', 'year_graduated', 'firm_name', 'firm_url')
    list_filter = ['school', 'year_graduated']
    search_fields = ['last', 'school', 'firm_name']

그리고 필드에 나열된 각 URL로 "firm_url"필드를 클릭 할 수 있도록 만들고 싶습니다. 어떻게 할 수 있습니까? 감사합니다.


링크를 HTML로 반환하는 LawyerAdmin 클래스에서 사용자 지정 메서드를 정의합니다.

def show_firm_url(self, obj):
    return '<a href="%s">%s</a>' % (obj.firm_url, obj.firm_url)
show_firm_url.allow_tags = True

설명서를 참조하십시오 .


format_html유틸리티를 사용하십시오 . 그러면 매개 변수에서 모든 html이 이스케이프되고 문자열이 템플릿에서 사용하기에 안전한 것으로 표시됩니다. allow_tags방법 속성은 장고 1.9에서 사용되지.

from django.utils.html import format_html

class LawyerAdmin(admin.ModelAdmin):
    list_display = ['show_firm_url', ...]
    ...

    def show_firm_url(self, obj):
        return format_html("<a href='{url}'>{url}</a>", url=obj.firm_url)

    show_firm_url.short_description = "Firm URL"

이제 관리자 사용자는 다음과 같은 경우에도 안전합니다.

firm_url == 'http://a.aa/<script>eval(...);</script>'

자세한 내용 은 설명서 를 참조하십시오.


추가 show_firm_urllist_display


하지만 내 모델에 지정된 텍스트 표시를 무시하고 열 머리글에 "show firm url"을 표시합니다.

short_description 속성을 할당하여 변경할 수 있습니다.

show_firm_url.short_description = "Firm URL"

원하는 경우 모델에서 처리 할 수 ​​있습니다.

models.py에서 :

class Foo(models.Model):
...


     def full_url(self):
        url = 'http://google.com'
        from django.utils.html import format_html
        return format_html("<a href='%s'>%s</a>" % (url, url))

admin.py :

    list_display = ('full_url', ... )

참조 URL : https://stackoverflow.com/questions/1949248/how-to-add-clickable-links-to-a-field-in-django-admin

반응형