javascript django渲染模板中的真实的时间搜索

sdnqo3pr  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(113)

项目详细信息:-
1.模板是通过在Django视图中使用分页来呈现
1.我在Templete中使用了for循环(仅用于包含td的tr)来显示html表中的所有结果。
1.分页逻辑将添加到table标记下方的templete中。
1.该表中有多个列
我想实现一个真实的搜索功能到一个由django呈现的表。同时,搜索应该从所有的页面。只有那些条目应该显示在搜索框中包含该字符串。

w6mmgewl

w6mmgewl1#

你可以用htmx以一种非常简单的方式实现这一点。3个步骤:

  • 将你的表提取到一个单独的文件中,并使用django的include template标签将其包含在页面中。
  • 在你的视图中检查请求是由HTMX还是django发出的(有一个django-htmx包可以为你做这件事),并相应地只呈现包含项目的表格或整个页面。
  • 修改你的搜索输入以使用htmx,并使用apache将修改提交到你的视图。

this repository中有一个使用django-htmx的工作示例。
在那里,它是按照以下步骤完成的:步骤1(在您的模板中)

<div class="content">
    <div class="container-fluid">
        <div class="card">
            <div class="card-content">
                <div id="beers-table">
                    {% include "beers/includes/beers-table.html" %}
                </div>
            </div>
        </div>
    </div>
</div>

字符串
第二步(在你看来)

def active_search(request):
    query = request.GET.get("q")
    page = request.GET.get("p", 1)
    template = "beers/active-search.html"
    if request.htmx:
        template = "beers/includes/beers-table.html"
    if query:
        beers = Beer.objects.search(query)
    else:
        beers = Beer.objects.all().prefetch_related("style", "category")
    return render(
        request,
        template,
        {
            "beers": Paginator(beers, 10).get_page(page),
            "page": page,
            "query": query,
            "not_found": not beers.exists(),
        },
    )


步骤3(您的搜索表单)

<form action="{% url 'beers:active-search' %}" method="get" class="form-group col-md-6">
    <label class="control-label">
        Search
        <img class="htmx-indicator" id="indicator"  src="{% static 'img/indicator.svg' %}">
    </label>
    <input 
        placeholder="Begin Typing To Search..." 
        data-hx-get="{% url 'beers:active-search' %}" 
        data-hx-trigger="keyup[target.value.length > 3 || target.value.length === 0] changed delay:500ms" 
        data-hx-target="#beers-table"
        data-hx-push-url="true"
        data-hx-indicator="#indicator"
        style="background:#fafafa" 
        class="form-control" 
        type="text"
        value="{{query|default:''}}"
        name="q" />
</form>

jchrr9hc

jchrr9hc2#

HTML:-

<input type="search" name="search" id="search_box" placeholder="Search Using Saral-ID or Name">

字符串
Django-View:

def search_form(request):
    pk = request.GET.get('id')
    filter_data = br_ambedkar_form.objects.filter(saral_id__contains=str(pk)) | br_ambedkar_form.objects.filter(applicant_name__contains=str(pk))
    return render(request , 'br_ambedkar_forms/search_table/search_table.html' , {
        'forms' : filter_data,
    })


JavaScript:-

document.addEventListener('DOMContentLoaded' , ()=>{
    document.getElementById('search_box').addEventListener("keyup" , ()=>{
        search_value = document.getElementById('search_box').value;
        fetch(`/forms/search/?id=${search_value}`)
        .then(data => data.text())
        .then(text => {
            document.getElementById('table').innerHTML=text
        });
    })  
})


这样我就可以得到真实的时间搜索。

相关问题