Как добавить код шаблона Django в JavaScript innerHTML

#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. Для этого нужен другой код скрипта, верно?