Comment append une colonne personnalisée avec un hyperlien dans l’interface d’administration de Django?

J’ai une interface d’administration de Django et dans la liste des modèles, je veux une colonne personnalisée qui sera un lien hypertexte utilisant l’une des valeurs des champs. Fondamentalement, l’un des champs du modèle est une URL et j’aimerais que la colonne ait cette URL dans un lien hypertexte cliquable. Ce lien devra avoir une URL supplémentaire ajoutée comme un chemin relatif dans le champ du modèle.

Définissez une méthode dans votre classe ModelAdmin et définissez son atsortingbut allow_tags sur True . Cela permettra à la méthode de renvoyer le code HTML non échappé pour l’afficher dans la colonne.

Puis listez-le comme une entrée dans l’atsortingbut ModelAdmin.list_display.

Exemple:

 class YourModelAdmin(admin.ModelAdmin): list_display = ('my_url_field',) def my_url_field(self, obj): return '%s' % ('http://url-to-prepend.com/', obj.url_field, obj.url_field) my_url_field.allow_tags = True my_url_field.short_description = 'Column description' 

Voir la documentation de ModelAdmin.list_display pour plus de détails.

Utilisez l’utilitaire format_html . Cela échappera à tous les fichiers HTML à partir des parameters et marquera la chaîne comme étant sûre à utiliser dans les modèles. L’ allow_tags méthode allow_tags est obsolète dans 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("{0}", obj.url) 

Maintenant, vos utilisateurs admin sont en sécurité même dans le cas de:

 url == '' 

Voir la documentation pour plus d’informations.