[Django, Python] Change ListのURLをリンクにする
2008年11月25日
Adminサイトの変更リスト内にURLを表す文字列が合った場合に、ハイパーリンクへ変換する方法です。
本来的な対応は面倒そうに見えたので、JavaScriptで強引にやりました。
Djangoバージョンは 0.96.2 です。
本来的な対応は面倒そうに見えたので、JavaScriptで強引にやりました。
Djangoバージョンは 0.96.2 です。
改修は django/contrib/admin/templates/admin/change_list.html を修正します。
テンプレの改修手順は、Django本来のやり方に従ってください。
(変更前)
{% block result_list %}{% result_list cl %}{% endblock %}
(変更後)
{% block result_list %} <script type="text/javascript"> (function(){ var id = '__change_urls_to_links__'; document.write('<div id="' + id + '"></div>'); var e = document.createElement('a'); e.innerHTML = '[Change urls to links]'; e.href = "javascript:void(0);"; var f = function(){var l=document.getElementById("changelist").getElementsByTagName("td");for(var i=0;i<l.length;i++){var h=l[i].innerHTML;l[i].innerHTML=h.replace(/^https?:.+$/,'<a href="'+h+'" target="_blank">'+h+'</a>',h)}} e.onclick = f; document.getElementById(id).appendChild(e); })(); </script> {% result_list cl %}{% endblock %}
- 改修後に画面に表示される Change urls to links というリンクを押すと変換されます。
- 処理は、tdタグのinnerHTMLが”http://”や”https://”で始まる文字列を
URLとみなしてリンクに変換するだけです。
なんで、中のテキスト次第では、リンクにしたくない文字列がリンクになったり、XSSを発生させるセキュリティホールになります。 - 下記はテンプレいじりたくなーい!という人向けにブクマ化したもの
> [Change urls to links]
JSは便利だなー。