2009-12-22 17 views
40

tengo unas pocas cosas admin.py¿Cómo agregar enlaces que se pueden hacer clic a un campo en el administrador de Django?

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

y quiero hacer que los campos "firm_url" se puede hacer clic con cada una de las URL que aparece en el campo. ¿Cómo puedo hacer esto? Gracias.

+4

En mi humilde opinión [esto] (http://stackoverflow.com/a/33616452/1472718) debería ser la respuesta correcta. –

Respuesta

55

definir un método personalizado en su clase LawyerAdmin que devuelve el enlace como HTML:

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

Ver the documentation.

+0

Gracias! Esto funciona genial – Zeynel

+7

¿Qué pasa si 'firm_url = 'http: //a.aa/ ''? –

+4

Utilice [Respuesta de Seppo] (http://stackoverflow.com/a/31745953/855050) en su lugar. Es mas seguro. – becko

5

añadir show_firm_url a list_display

+0

Sí, lo hice y ahora funciona, gracias. Pero anula la visualización de texto especificada en mis modelos y muestra "mostrar url firme" en el encabezado de la columna. No sé si hay una forma de evitarlo, pero cambié "show_firm_url" a "Bio_link" y todo está bien ahora. – Zeynel

2

Pero se anula la visualización de texto especificado en mis modelos y muestra "Mostrar firma de URL" en la cabeza de la columna

Se puede cambiar mediante la asignación de short_description propiedad:

show_firm_url.short_description = "Firm URL" 
47

Utilice la utilidad format_html. Esto escapará a cualquier html de los parámetros y marcará la cadena como segura para usar en las plantillas. El atributo de método allow_tags ha quedado obsoleto en Django 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" 

Ahora sus usuarios administradores son seguros, incluso en el caso de:

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

Ver the documentation para obtener más información.

Cuestiones relacionadas