Django - Как визуализировать HTML и вернуть JSON одновременно - PullRequest
0 голосов
/ 13 мая 2019

У меня есть представление, которое заполняет объект json, а затем, в конце того же представления, я отображаю html-страницу, но также возвращаю окончательный json.

возможно, это не имеет значения, но json будет выглядеть примерно так:

{
    "embedToken": "dasfgjasdàgjasdàgasdàgèe-AveryLongToken",
    "embedUrl": "https://app.powerbi.com/let's_go_to_the_lake",
    "reportId": "e615-sfash-9746"
}

строка, которую я не могу исправить (пробовал весь день всеми альтернативными методами), выглядит следующим образом:

return render(request, "home.html", jsn)

мой url.py прост, как следует:

urlpatterns = [
    path('', HomePageView, name='home'),
]

В настоящее время я получаю следующую ошибку:

context must be a dict rather than str.

Но я столкнулся с разными путями, но не смог достичь желаемого результата (рендеринг html и возврат json одновременно). Так что я сомневаюсь, что я выбрал неправильный подход к основам, должен ли я изменить дорогу?

Я хотел бы попытаться преобразовать JSON в словарь, а затем, возможно, преобразовать его обратно в JSON в JavaScript

Я также пытался разделить свои запросы, отобразив html как представление django и выполнив вызов функции из javascript-запроса ajax следующим образом:

function handler1(){
    // there are many other methods like $.get $.getJSON
    $.ajax({
       type: 'GET',
       dataType: 'json',
       url: "http://piedpiper.com/api/callers"
    }).then(function(result) {
        // do something with the result

    });
}

Но в итоге я понял, что таким образом я должен создать URL api / callers, которые будут доступны / доступны для всех, что я не могу сделать из-за сеанса пользователя. только зарегистрированные пользователи должны видеть данные json

1 Ответ

0 голосов
/ 13 мая 2019

Вам нужно добавить правильные аргументы при рендеринге. Вот документы для функции рендеринга в Django

Вот пример кода вида

def post_detail(request, slug=None):
    instance = get_object_or_404(Post, slug=slug)
    share_string = quote_plus(instance.content)
    context = {
        "title": instance.title,
        "instance": instance,
        "share_string": share_string,
    }
    return render(request, "post_detail.html", context)
...