2009-12-22 11 views
40

Ich habe dieses admin.pyWie fügt man klickbare Links zu einem Feld in Django admin hinzu?

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'] 

und ich will „firm_url“ Felder klickbare mit jedem der URL in dem Feld aufgelistet machen. Wie kann ich das machen? Vielen Dank.

+4

IMHO [http://stackoverflow.com/a/33616452/1472718] sollte die richtige Antwort sein. –

Antwort

55

eine benutzerdefinierte Methode in Ihrer LawyerAdmin Klasse definieren, die die Verbindung als HTML zurückgibt:

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

the documentation See.

+0

Danke! Das funktioniert großartig. – Zeynel

+7

Was ist, wenn 'firm_url = 'http: //a.aa/ ''? –

+4

Verwenden Sie stattdessen [Seppo's Antwort] (http://stackoverflow.com/a/31745953/855050). Es ist sicherer. – becko

5

show_firm_url zu list_display

+0

Ja, ich tat und jetzt funktioniert es, danke. Es überschreibt jedoch die in meinen Modellen angegebene Textanzeige und zeigt am Kopf der Spalte "show firm url" an. Ich weiß nicht, ob es einen Weg gibt, aber ich habe "show_firm_url" in "Bio_link" geändert und es ist alles in Ordnung. – Zeynel

2

hinzufügen Aber es überschreibt die in meinen Modellen und zeigt „Show Firma url“ auf dem Kopf der Säule

Sie können es durch die Zuordnung short_description angegebene Textanzeige ändern Eigenschaft:

show_firm_url.short_description = "Firm URL" 
47

Verwenden Sie das format_html Dienstprogramm. Dadurch wird HTML aus den Parametern entfernt und die Zeichenfolge als sicher für die Verwendung in Vorlagen markiert. Das Methodenattribut allow_tags wurde in Django 1.9 nicht weiter unterstützt.

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" 

Jetzt ist Ihr Admin-Benutzer sicher, auch im Fall von:

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

Siehe für weitere Informationen the documentation.

Verwandte Themen