2015-01-30 1 views
0

내가하려는 것은 페이지를로드 할 때 모든 데이터가 표시되는 웹 페이지에서 검색 기능을 제공하는 것입니다. 데이터 세트는 그다지 크지 않으므로 (< 500 개 항목) 페이지를 새로 고칠 필요가없는 검색 기능 (또는 그 요청에 대한 요청)을 제공하는 것은 매우 사용자 친화적입니다. 흥미로운 Javascript 라이브러리 (this answer에 요약)를 보았습니다. 특히 Fuse.jsLunr.js은 내 시나리오에 매우 적합합니다.Django 컨텍스트 변수에 자바 스크립트 검색 알고리즘 사용

문제는 내가 JSON 만 독점적으로 검색하는 것처럼 보이는 라이브러리를 장고가 전달한 컨텍스트에 적용하는 방법을 모르겠다는 것입니다. 장고 기능의 표면을 긁어 본 이유는 며칠 전부터 작업을 시작했기 때문입니다. 분명히 뭔가 빠져 있다면 용서해주십시오. 고맙습니다!

답변

2

템플릿에 JSON 만 출력하면됩니다. json.dumps()을 통해보기에서 직접 전달하거나 템플릿의 데이터를 수동으로 반복하여 JSON을 만들 수 있습니다. 첫 번째가 바람직합니다.

그래서, 퓨즈 예제를 사용하여,보기는 할 것 :

def my_view(request): 
    data = ... get data from wherever ... 
    return render(request, 'template.html', {"data": json.dumps(data)}) 

및 템플릿 :

<script type="text/javascript"> 
    var data = {{ json_data }} 
    var options = ... 
    var f = new Fuse(data, options) 
</script> 
0

다니엘 동안 (코멘트에이) 어떻게 추가하는 말해줘서 확실히 올바른입니다 컨텍스트에 대한 JSON - 아마도 질문을 다르게 표현해야했습니다. 그러나 나는 빗 나간다.

더 많은 작업을 마친 후 개체 계층 구조에서 올바른 JSON을 생성 중입니다. 이 JSON은 컨텍스트를 통해 전달 된 다음 Mustache.js과 함께 사용되어 HTML을 생성합니다. JSON 도 Django의 템플릿 언어를 사용하여 JSON을 반복 처리하므로 데이터를 전달하는 방법을 찾을 수 없습니다. 이 방향을 다른 방향에서 접근 할 때, 클라이언트 쪽에서 JSON으로 일반 Django 컨텍스트 (예 : var.objects.all() 컨텍스트)를 변환하는 방법을 알아낼 수 없었습니다. (작은 따옴표로 어리석은 말도 안되기 때문에 ...)

그러나 Mustache.js로 HTML을 생성하는 것은 나쁘지 않았습니다. 검색 알고리즘 (내 경우 Fuse.js)에 의해 생성 된 검색 결과로 페이지를 쉽게 조작 할 수 있었기 때문입니다. 바라건대 성능은 생산 단계에서 좋겠지 만 확실히 유망 해 보입니다!

관련 문제