代码之家  ›  专栏  ›  技术社区  ›  surajitM

获取导出到CSV的搜索结果-django

  •  1
  • surajitM  · 技术社区  · 8 年前

    我有一个搜索功能,我还提供了用户将搜索结果导出为csv。我的搜索功能运行良好。但是,导出功能无法收集用户所做的搜索结果。我能理解这个问题背后的原因,但无法找到解决方法。(使用全局变量可能会有帮助,但我不想使用它) 我的搜索查询功能:

    def search_query(request):
        result = publication.objects.all()
        query = request.GET.get("query")
        if query:
            result = result.filter(
                Q(title__icontains=query) 
                Q(timeStamp__icontains=query)
            ).distinct()
        user_filter = UserFilter(request.GET, queryset=result)
    
        return user_filter
    

    我的搜索功能:

    def search(request):
        title = "Advanced Search"
        user_filter = search_query(request)
        context = {
            'title': title,
            'filter': user_filter,
        }
        return render(request, "search.html", context)
    

    我的导出功能:

    def export_search_csv(request):
        data = search_query(request)
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment;filename=publications.csv'
        writer = csv.writer(response)
        writer.writerow(['Title', 'Published On'])
        for item in data.qs:
            writer.writerow([item.title, item.timeStamp.strftime("%b-%Y")])
        return response
    

    html(导出部分):

    <p>
        <h5>
        <a href="{% url 'publication:export_search_csv' %}?{{ request.GET.urlencode }}" class="btn btn-default" style="width: 150px; role="button">
            <span class="glyphicon glyphicon-save">  </span> Export to CSV</a>      
        </h5>
      </p>
    

    主URL.py:

    urlpatterns = [
        url(r'^', include('publications.urls', namespace='publication')),
        ]
    

    urlpatterns = [
        url(r'^export/csv/$', views.export_search_csv, name='export_search_csv'),
    ]
    

    回溯

    File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/core/handlers/exception.py", line 41, in inner
        response = get_response(request)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/core/handlers/base.py", line 217, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/core/handlers/base.py", line 215, in _get_response
        response = response.render()
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/response.py", line 107, in render
        self.content = self.rendered_content
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/response.py", line 84, in rendered_content
        content = template.render(context, self._request)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/backends/django.py", line 66, in render
        return self.template.render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 207, in render
        return self._render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 199, in _render
        return self.nodelist.render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 990, in render
        bit = node.render_annotated(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 957, in render_annotated
        return self.render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/loader_tags.py", line 177, in render
        return compiled_parent._render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 199, in _render
        return self.nodelist.render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 990, in render
        bit = node.render_annotated(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 957, in render_annotated
        return self.render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/loader_tags.py", line 72, in render
        result = block.nodelist.render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 990, in render
        bit = node.render_annotated(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/base.py", line 957, in render_annotated
        return self.render(context)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/template/defaulttags.py", line 458, in render
        url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/urls/base.py", line 91, in reverse
        return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
      File "/usr/local/lib/python2.7/dist-packages/Django-1.11-py2.7.egg/django/urls/resolvers.py", line 497, in _reverse_with_prefix
        raise NoReverseMatch(msg)
    NoReverseMatch: Reverse for 'export_search_csv' not found. 'export_search_csv' is not a valid view function or pattern name.
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   neverwalkaloner    8 年前

    如果您在模板内使用“导出到csv”链接,则可以尝试使用此链接指定当前get参数,如下所示:

    <a href="{% url 'export_search_csv' %}?{{ request.GET.urlencode }}">export to csv</a>