J'ai une interface d'administration 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 des modèles est une URL et un i ' d comme la colonne pour avoir cette URL dans un lien hypertexte cliquable. Ce lien devra avoir une URL supplémentaire ajoutée à lui comme son chemin d'accès relatif dans le champ du modèle.
Définissez une méthode dans votre classe ModelAdmin et définissez son allow_tags
attribut à True
. Cela permettra à la méthode de renvoyer du code HTML non échappé pour affichage dans la colonne.
Ensuite, répertoriez-le en tant qu'entrée dans l'attribut ModelAdmin.list_display.
Exemple:
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'
Voir la documentation de ModelAdmin.list_display pour plus de détails.
Utilisez le format_html
utilitaire. Cela échappera à tout html des paramètres et marquera la chaîne comme sûre à utiliser dans les modèles. Le allow_tags
L'attribut de méthode 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("<a href='http://pre.com{0}'>{0}</a>", obj.url)
Maintenant, vos utilisateurs administrateurs sont en sécurité même dans le cas de:
url == '<script>eval(...);</script>'
Voir la documentation pour plus d'informations.