Передать визуализированный вид другому представлению приложения в Django - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь отобразить результаты двух приложений на одной веб-странице, но у меня возникают проблемы при попытке использовать предложенное решение здесь .

У меня есть «main_app», обрабатывающее содержимое большей части страницы, и я хотел бы добавить вывод «sub_app» (то есть визуализированного элемента <div>) на той же странице.

Вот как я собираю выходные данные sub_app в представлении main_app:

from sub_app.views import sub_app_view #
def main_app_view(request):    
    my_sub_app_html = user_tests(request) #supposed to get rendered HTML content from sub_app
    context = {
                'sub_app_html ': my_sub_app_html,
                }
    return render(request, 'main_app.html', context)

Тогда представление в sub_app:

def sub_app_view(request):
    context = {
                'sub_app_context': "foo",
                }
    return render(request, 'sub_app/sub_app.html', context)

main_app.html содержит:

<p>
{{ sub_app_html }}
</p>

и sub_app.html:

<div id="mydiv">
   {{ sub_app_context }}
</div>

Но вместо правильного отображения отрендеренного HTML из sub_app_view в браузере отображается main_app.html:

<HttpResponse status_code=200, "text/html; charset=utf-8">.

Есть ли решение для этого или лучший способ добиться связи между приложениями?

1 Ответ

1 голос
/ 19 марта 2019

вы можете сделать это, используя **

javascript и jquery

**

$.ajax({
  type: "get",
  url: url_app_1,
  data: data,
  success: here add your html to your div1,
  dataType: dataType
});
$.ajax({
  type: "get",
  url: url_app_2,
  data: data,
  success: here add your html to your div2,
  dataType: dataType
});

и в случае успеха вы можете добавитьhtml к вашему div

**

Решение Django:

**

Функция рендеринга возвращает HttpResponse (content,content_type, status), чтобы получить шаблон HTML, вам нужно:

def main_app_view(request):    
    my_sub_app_html = user_tests(request) 
    context = {
                # you need to get content then decode
                'sub_app_html ': my_sub_app_html.content.decode("utf-8"),
                }
    return render(request, 'main_app.html', context)

Вот исходный код рендера

...