Можно ли асинхронно отображать разные части / вкладки шаблона / страницы только с Django? - PullRequest
0 голосов
/ 22 марта 2020

На одной из моих страниц есть 4 вкладки. Некоторые вкладки требуют более длительной обработки бэкенда, но я не хочу, чтобы страница ждала каждую вкладку, вместо этого я хочу, чтобы каждая вкладка отображалась, как только она будет готова. До сих пор я использовал rest api для каждой вкладки, а затем создал всю вкладку в JS. Но мне больше нравится использовать Django шаблоны.

Есть ли способ, чтобы я мог создавать каждую вкладку в Django шаблонах?

<div class="tab-content">
  <div id="tab1" class="tab-pane fade in active">
    {% include 'my_project/tab1.html' %}
</div>
<div id="tab2" class="tab-pane fade">
    {% include 'my_project/tab2.html' %}
</div>
<div id="tab3" class="tab-pane fade">
    {% include 'my_project/tab3.html'%}
</div>
<div id="tab4" class="tab-pane fade">
    {% include 'my_project/tab4.html'%}
</div>

У меня есть один URL, я хочу этот URL для вызова обработчика 4-х серверных представлений для отображения каждой вкладки htmls.

1 Ответ

1 голос
/ 22 марта 2020

Django

def get_tab1(request) # called by get_tab1 in urls.py
    ....
    return render(request,  "tab1.html", {<whatever data>})

Шаблон

<div id = tab1></div>
<div id = tab2></div>
etc.

Также имеется шаблон HTML для каждой вкладки.

JS (Ajax здесь jQuery. Однако JS делает ajax для простого JS)

// get tab html and insert it in page
$.ajax({
    type: "POST",
    url: "get_tab1/", 
    data: {},
    success: function(data){
      document.getElementById("tab1").innerHTML = data;
    }
    ,error: function() {
    } 
 }); 

Вы можете столкнуться с проблемой CSRF с этим кодом. Я предоставляю токен CSRF при каждом запросе на публикацию, но вы также можете сделать представление @csrf_exempt. Или сделать это ПОЛУЧИТЬ.

...