[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は便利だなー。