#javascript #python #json #django
#javascript #python #json #django
Вопрос:
Я пытаюсь добавить функцию поиска для моего проекта Django, но у меня проблема с тем, как написать шаблон Django в Javascript Innerbox.
У меня есть модель элемента следующим образом:
class Item(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(blank=False, upload_to=upload_design_to)
price = models.DecimalField(decimal_places=2, max_digits=100)
discount_price = models.DecimalField(decimal_places=2, max_digits=100, blank=True, null=True)
timestamp = models.DateTimeField(default=timezone.now)
Список элементов выглядит следующим образом:
class ItemListView(ListView):
model = Item
paginate_by = 12
template_name = "store/product_list.html"
ordering = ['-timestamp']
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["qs_json"] = json.dumps(list(Item.objects.values()),cls=DjangoJSONEncoder)
return context
У меня есть следующий скрипт:
<script>
const data = '{{qs_json}}'
const rdata = JSON.parse(data.replace(/amp;quot;/g, '"'))
console.log(rdata)
const input = document.getElementById('search_here')
console.log(input)
let filteredArr = []
input.addEventListener('keyup', (e)=>{
box.innerHTML = ""
filteredArr = rdata.filter(store=> store['title'].includes(e.target.value))
console.log(filteredArr)
if (filteredArr.length > 0){
filteredArr.map(store=>{
box.innerHTML = `<b>${store['title']}</b><br>` <------------------------------- Replace
})
} else {
box.innerHTML = "<b>No results found...</b>"
}
})
</script>
Я пытаюсь заменить innerHTML <b>${store['title']}</b><br>
на
<div class="col-4 mb-3">
<div class="card h-100">
<a href="{{item.get_absolute_url}}">
<embed src="{{ item.image.url }}" class="card-img-top" alt="..."/>
</a>
<div class="card-body">
<h5 class="card-title">{{ item.title }}</h5>
<p class="card-text">
{% if item.description %}
{{ item.description }}
{% endif %}
</p>
</div>
<div class="card-footer">
<small class="text-muted">{{ item.timestamp }}</small>
</div>
</div>
</div>
Но в результате ничего не показывает сломанное изображение и оно не отражает информацию об элементе
Мой вопрос заключается в том, как мне показать информацию, относящуюся к каждому элементу
Ответ №1:
Это решение намного проще:
result_html = loader.render_to_string(
'template_name.html', {'object_list': object_list}
)
data = {
'result_html': result_html,
}
return JsonResponse(data)
Комментарии:
1. Мог бы добавить еще немного объяснений, так как я новичок в Javascript
2. с помощью этого решения вы можете использовать Ajax для извлечения данных из Django. затем добавьте result_html на свою страницу.
3. Для этого нужен другой код скрипта, верно?