Когда вы устанавливаете gridData
и пытаетесь связать его с Vue компонентом, он не работает, потому что у них разные контексты. Когда вы имеете дело с Vue компонентами, вы можете получить доступ только к данным, определенным в экземпляре Vue. Кроме того, {{json_data|safe}}
уязвим для атак типа XSS.
Тем не менее, очень легко безопасно передавать данные из Django в Vue компонент, мы просто должны использовать json_script
фильтрует и загружает данные в Vue mounted
hook.
В views.py просто передайте список в шаблон, не нужно использовать json.dumps()
:
class CurrentClassroomView(LoginRequiredMixin, CreateView):
template_name = 'home/index.html'
def get(self, request, *args, **kwargs):
db_data = list(myData.objects.all().values())
return render(request, self.template_name, {'json_data':db_data})
В index. html мы будем использовать тег шаблона json_script
для создания отформатированного представления JSON json_data
переменной:
{% block content %}
{{ json_data|json_script:"json_data" }}
<div id="app">
<table_component></table_component>
</div>
{% end block %}
Это создаст <script>
блок, например:
<script id="json_data" type="application/json">{"hello": "world"}</script>
И, наконец, в myComponent. vue, мы загружаем, JSON - декодируйте и устанавливайте данные в mounted
хуке:
export default {
data() {
return {
tableData
}
},
components: {
Grid,
ButtonModal
},
mounted() {
this.tableData = JSON.parse(document.getElementById('json_data').textContent)
},
}