Djangoでサイドバーを追加する方法を調べてみたが、同じアプリ内でしかviews.pyからgetができないことがわかった(参考)
そこで、サイドバーを特定のアプリ内で表示(cssでvisibility: hidden;)した状態で、base.htmlでスクレイピングしてみた
1. まず、スクレイピングのため、jqueryのgetでurlを指定
$.get("{% url 'blog' %}")
2. 続いてdone()関数を用いて、スクレイピングした値を引数として受け取る
$.get("{% url 'blog' %}")
.done(function(data) {
})
3. dataは文字列なのでDOMParser()を用いてHTMLにキャストする
$.get("{% url 'blog' %}")
.done(function(data) {
let parser = new DOMParser();
let doc = parser.parseFromString(data, "text/html");
})
4. data内におけるスクレイピングしたい要素をHTMLのままelementに代入
$.get("{% url 'blog' %}")
.done(function(data) {
let parser = new DOMParser();
let doc = parser.parseFromString(data, "text/html");
let element = doc.getElementsByClassName("xxx")[0].innerHTML
})
5. あとはdocumentに入れるだけ。insertAdjacentHTMLの引数のafterendは色々変えられるみたいなので代入したい場所に応じて変えると良い(参考)
$.get("{% url 'blog' %}")
.done(function(data) {
let parser = new DOMParser();
let doc = parser.parseFromString(data, "text/html");
let element = doc.getElementsByClassName("xxx")
appendText(element[0].innerHTML);
function appendText ( text ) {
let element = document.getElementById( "yyy" )
element.insertAdjacentHTML("afterend", text ) ;
};
})
ちょっと色々試行錯誤して大変だった