J'ai ce 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']
et je veux rendre les champs "firm_url" cliquables avec chacune des URL répertoriées dans le champ. Comment puis-je faire ceci? Je vous remercie.
Définissez une méthode personnalisée dans votre classe LawyerAdmin qui renvoie le lien au format 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
Voir la documentation .
Utilisez l'utilitaire format_html
. Cela échappera à tout paramètre HTML et marque la chaîne comme étant sans danger pour les modèles. L'attribut de méthode allow_tags
est déconseillé dans 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"
Maintenant, vos utilisateurs administrateurs sont en sécurité, même dans le cas de:
firm_url == 'http://a.aa/<script>eval(...);</script>'
Voir la documentation pour plus d'informations.
ajouter show_firm_url
à list_display
Mais il remplace l'affichage de texte spécifié dans mes modèles et affiche "show firm url" en haut de la colonne.
Vous pouvez le changer en assignant la propriété short_description:
show_firm_url.short_description = "Firm URL"
Réponse mise à jour pour Django 2.0
models.py:
class BlaBla(models.Model):
...
def full_url(self):
url = 'http://google.com'
from Django.utils.html import format_html
return format_html("<a h
ref = '% s'>% s "% (url, url))
admin.py:
list_display = ('full_url', ... )