Django JsonResponse с контекстом - PullRequest
0 голосов
/ 18 апреля 2020

Можно ли использовать функцию JsonResponse и вернуть. json файл с контекстом dict? У меня есть только один. html, и если я нажму на href, ajax получит. json файл и переключит div.

html:

<form id='FormSite' method="POST">
    {% csrf_token %}
  <div id='Bilboard'>
    <div id='Pic'>
    <video id='VideoStart' style="width: 100%; height: 100%;" autoplay preload="true" loop >
        <source src="static/video/mainVideo.mp4"poster="static/img/facebook.png" type='video/mp4'>
            Your browser does not support the video tag.
        </video>
      </div>
        <div id='Wpis'>
          <h1 id='HeaderWpis'>Aktualności:</h1>
          <div id='WpisChild'>
          {% for News in Messags %}
          <div id='NewsPapper'>
         <p style="font-size: 200% !important;">{{ News.title }}</p>
         <img src="static/img/line.png" style="width: 5%; height: 5%; position: relative !important; left: 50%; transform: translateX(-50%);"> 
         <p style="font-size: 150% !important;">{{ News.text |linebreaksbr }}</p>
         <img src="static/img/line.png" style="width: 5%; height: 5%; position: relative !important; left: 50%; transform: translateX(-50%);">
         <p style="font-size: 150% !important;">{{ News.Data }}</p>
        </div>
          {% endfor %}
        </div>
        </div>
  </div>
</form>

views.py

def FirstStart(request):
if request.method == 'POST':
    respone = {}
    UrlCut = request.GET.get('site','')
    if(len(UrlCut) > 0):
        File_read_to_div = open('templemates/'+UrlCut+'.txt','r')
    else:
        File_read_to_div = open('templemates/Main.txt','r')
    respone['Pic'] = str(File_read_to_div.readline())
    respone['h1'] = str(File_read_to_div.readline())
    respone['WpisChild'] = str(File_read_to_div.readline())
    #r
    Messages = NewsMessage.objects.all().order_by('-Data')
    context = {
        "Messags" : Messages
    }
    return JsonResponse(respone, context)
Messages = NewsMessage.objects.all().order_by('-Data')
context = {
    "Messags" : Messages
}
return render(request, 'main.html', context)

ajax

 $.ajax({                                                                                                                           
    url: url,
    data: $('#FormSite').serialize(), 
    type: "POST",
    async:false,
    success: function(response) {
        $($("#Pic").first()).replaceWith($(response['Pic']));
        $("#HeaderWpis").text(response['h1'])
        $($("#WpisChild").first()).replaceWith($(response['WpisChild']))
    },
    error: function()
    {
        alert('Bad connection');
    }

});

Итак, если я сначала загружу main. html {{News.title}} et c. Работа. Но если ajax / django загрузить этот сайт из .txt, он не сможет найти контекст и отобразить функцию ошибки.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Я изменил мои views.py следующим образом:

Messages = NewsMessage.objects.all().order_by('-Data').values()
    respone = {
        "Pic" : str(File_read_to_div.readline()),
        "h1" : str(File_read_to_div.readline()),
        "WpisChild" : str(File_read_to_div.readline()),
        "Messags" : list(Messages)
    }
    return JsonResponse(respone, safe=False)

Теперь ajax конец всегда успешен, но {% для%}, {{News.title}} и т. Д. c. отображать как текст Есть идеи?

0 голосов
/ 18 апреля 2020

JsonResponse не принимает контекст как параметр.

https://docs.djangoproject.com/en/3.0/ref/request-response/#jsonresponse -объекты

Первый параметр, data, должен быть экземпляром dict , Если для параметра safe установлено значение False (см. Ниже), это может быть любой JSON -сериализуемый объект.

>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
b'{"foo": "bar"}'

В вашем случае вы сможете добавлять сообщения в свой словарь:

respone['messages'] = NewsMessage.objects.all().order_by('-Data')

return JsonResponse(respone)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...