Моя переменная JavaScript не может принять объект, который я отправил с использованием метода Django render () - PullRequest
0 голосов
/ 08 января 2020

Я пытался извлечь Django объект в формате JSON в мою переменную javascript. Я использовал из django .core import serializer предопределенный метод, доступный в Django, чтобы преобразовать его в формат JSON. Когда я пытался извлечь этот объект непосредственно в тег Jinja, он печатал все данные, но когда я пытался получить эти данные в переменной Javascript, это не сработало.

view .py

from django.http import HttpResponse
from django.shortcuts import render
from .models import Employee
from django.core import serializers
import json

def home(request):
    data = serializers.serialize("json", Employee.objects.all())
    return render(request,'home.html',{'data':data})

home. html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    {% extends 'masterpage.html' %}

    {% block content %}
    **{{data | safe}}**(go below for output)
    <form action="checkEmail" method="POST">
        {% csrf_token %}
         <input type="text" name="emailId" placeholder="Enter Email Id">
        <input type="submit">
    </form>
    {% endblock %}
    <p id="demo"></p>

    <script type="text/javascript">
        var data=eval('('+'{{data}}'+')');
        var p=10;
        document.getElementById("demo").innerHTML=p
        console.log(p)
        console.log(data);
        alert(data);
    </script>
</body>
</html>

Вывод : [{"model": "journal .employee "," pk ": 1," fields ": {" ename ":" Piyu sh Jiwnae "," eemail ":" jiwanepiyush@gmail.com "}}]

Я вижу вывод для непосредственного использования тега jinja в HTML, но когда я пытаюсь получить это значение в переменной javascript, оно не приходит, и, как показано в коде, я пытался показать эти данные и var p = 10; document.getElementById ("demo"). innerHTML = p это значение также не печатается на консоли.

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Если я правильно вижу, ваш скрипт выдает ошибку в этой строке:

var data=eval('('+'{{data}}'+')');

, говоря что-то вроде

SyntaxError: expected property name, got '&'

В необработанном формате ваши данные отображаются примерно так:

[{&quot;model&quot;: &quot;stack.employee&quot;, &quot;pk&quot;: 

Если вы пометите переменную данных как безопасную, вы должны получить правильный json объект:

var data=eval('('+'{{data|safe}}'+')');

Редактировать: Другая проблема в вашем коде:

Ваш тег расширяется не в том месте. Вы должны поставить {% extends 'masterpage.html' %} в верхней части шаблона, а не в теге <body>. И тогда вы должны убрать тег <head> в вашем шаблоне, потому что он, вероятно, уже находится в вашем masterpage.html

0 голосов
/ 08 января 2020

вы можете передать данные как JSON и проанализировать этот объект в js с JSON .parse

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