2010-01-28 4 views
47

장고 관리 인터페이스가 있고 모델 목록에 필드 값 중 하나를 사용하여 하이퍼 링크가 될 사용자 지정 열이 필요합니다. 기본적으로 모델 필드 중 하나는 URL이며 클릭 할 수있는 하이퍼 링크에 해당 URL이 있어야합니다. 이 링크에는 모델 필드의 상대 경로로 URL 앞에 추가 URL이 있어야합니다.django 관리 인터페이스에 하이퍼 링크가있는 사용자 정의 열을 추가하려면 어떻게합니까?

+1

[Django 관리자의 필드에 클릭 가능한 링크를 추가하는 방법] (http://stackoverflow.com/questions/1949248/how-to-add-clickable-links-to-a-field-in) -django-admin) – Louis

답변

60

ModelAdmin 클래스에 메소드를 정의하고 allow_tags 속성을 True으로 설정하십시오. 이렇게하면 메서드가 열에 표시하기 위해 이스케이프 처리되지 않은 HTML을 반환 할 수 있습니다.

그런 다음이를 ModelAdmin.list_display 속성의 항목으로 나열하십시오.

예 :

class YourModelAdmin(admin.ModelAdmin): 
    list_display = ('my_url_field',) 

    def my_url_field(self, obj): 
     return '<a href="%s%s">%s</a>' % ('http://url-to-prepend.com/', obj.url_field, obj.url_field) 
    my_url_field.allow_tags = True 
    my_url_field.short_description = 'Column description' 

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

+0

장고 관리자가 자동으로 URL을 하이퍼 링크로 바꿀 것이므로 실제로 요즘에는 'a' 태그가 필요 없다는 것을 알았습니다. 나는 일하는 PC가 아니기 때문에 틀릴 수도있다. 필자의 경우 allow_tags를 설정할 필요가 없었다. 내 admin 모델과는 반대로 내 모델에'get_url()'함수를 만들었지 만 이것은 매우 사소한 일이다. 그러나,'target = _blank'라는 새로운 윈도우에서 링크를 열고 싶다면 당신의 방법이 가장 좋습니다 - 이것이 도움이되기를 바랍니다. –

10

format_html 유틸리티를 사용하십시오. 이렇게하면 매개 변수에서 html을 이스케이프하고 템플릿에서 사용하기에 안전하다고 문자열을 표시합니다. allow_tags 메소드 속성은 Django 1.9에서 사용되지 않습니다.

from django.utils.html import format_html 

class MyModelAdmin(admin.ModelAdmin): 
    list_display = ['show_url', ...] 
    ... 

    def show_url(self, obj): 
     return format_html("<a href='http://pre.com{0}'>{0}</a>", obj.url) 

는 이제 관리자의 사용자들은의 경우 안전 :

url == '<script>eval(...);</script>' 

더 많은 정보를 원하시면 the documentation를 참조하십시오.

관련 문제