2016-05-27 2 views
1

Я знаю, что это не вопрос, похожий на stackoverflow, но, пожалуйста, не запрещайте мне это. Мне действительно нужна рекомендация по передовой практике.Django HTML-шаблоны - хранение объекта JSON где-то на странице

У меня есть представление Django, отображающее таблицу в HTML-шаблоне. Моя цель состоит в том, чтобы проверять входные данные пользователя на стороне клиента, а часть проверки связана с сложным анализом данных, который учитывает данные, которые не отображаются в таблице. Я не могу использовать определяемые пользователем атрибуты, потому что у меня есть фильтр на таблице, скрывающий строки в зависимости от условий фильтра, и если фильтр не пуст, моя проверка данных будет неправильной на основе анализа всех строк таблицы.

ОБНОВЛЕНИЕ: По этой причине я передаю объект JSON из представления Django в HTML-шаблон. Но проблема в том, что я не могу передать его внешнему JS-файлу.

Например, допустим, что у меня есть таблица для редактирования, как указано ниже.

<tbody json_failed_attempt = {{json_object}}> 
    {% for vendor in vendors_table %} 
    <tr> 
     <td class = 'click_this_row'> 
      {{vendor.legal_entity.name}} 
     </td> 
    </tr> 
    {% endfor %} 
</tbody> 

JQuery

$('td.click_this_row').on('change', function() 
    { 
     // HOW SHOULD I PARSE THROUGH THE JSON ??? 
     // This alert outputs this: 
     // "[{"model":" 
     alert ($('#vendorsTable tbody').attr('legal_entities_json')) 
    } 

Джанго вид:

def vendors(request): 

    vendors_table = Vendors.objects.all() 
    legal_entities_queryset = LegalEntities.objects.all() 
    legal_entities_json = serializers.serialize('json', legal_entities_queryset, fields=('inn', 'kpp')) 

    return render_to_response('vendors/vendors_list.html', 
          {'vendors_table':vendors_table, 
           'legal_entities_json' : legal_entities_json}, 
           context_instance=RequestContext(request)) 

Возможно ли это метод? И если да, почему я не могу использовать parseJSON здесь? И как должен выглядеть цикл?

ответ

2

Просто используйте JSON.parse в вашем JavaScript:

JSON.parse($('#vendorsTable tbody').attr('legal_entities_json')) 

Другой подход заключается в создании переменной яваскрипта и присвоить объект JSON к нему (так как JSON является корректным JavaScript Object). В шаблоне:

<script> 
var data = {{ json_object }}; 
</script> 

, а затем использовать data переменную во внешнем файле JS.

+1

@EdgarNavasardyan Вы задаете переменную 'data' перед включением внешнего скрипта JS? Вы также можете попытаться установить 'data' как атрибут объекта window:' window.my_data = {{json_object}}; ' – dizballanze

+0

спасибо, оба метода работают сейчас. Единственный вопрос, который беспокоит меня, - это тот факт, что пользователь может видеть данные, если они просматривают источник страницы. Разве это не проблема сатира? –

+0

@EdgarNavasardyan Я не думаю, что это проблема безопасности. Django имеет защиту по умолчанию от подобных проблем. https://docs.djangoproject.com/es/1.9/topics/security/#cross-site-scripting-xss-protection – dizballanze

Смежные вопросы