django一个视图的变量到另一个视图的会话

时间:2014-06-26 04:19:59

标签: django session csv

我对此非常困惑,我不知道该怎么做.. 我有一个视图,我列出了我的新闻表中的所有新闻。为了显示新闻,我在列表视图中传递了上下文数据。这是我的观点

class SingleNewsView(ListView):
model = News
form_class = SearchForm
template_name = "single_news.html"

# def post(self, request, **kwargs):
#   print "request"
#   form = SearchForm(request.user)



def get(self, request, pk, **kwargs):

    #form = SearchForm(request.user)
    self.pk = pk

    self.pub_from = request.GET.get('pub_date_from',False)
    self.pub_to = request.GET.get('pub_date_to',False)
    self.crawlers = request.GET.get('crawler',False)


    print self.crawlers


    return super(SingleNewsView,self).get(request,pk, **kwargs)



def get_context_data(self, **kwargs):

    context = super(SingleNewsView,self).get_context_data(**kwargs)
    context["form"] = SearchForm
    if self.pub_from and self.pub_to and self.crawlers:
        context["something"] = News.objects.filter(category_id=self.pk).filter(published_date__range=(self.pub_from,self.pub_to), crawler=self.crawlers)
    else:
        context["something"] = News.objects.filter(category_id=self.pk)

    return context

我写了一些观点,我从django doc引用了以csv格式下载新闻..我还包括一个搜索表单来过滤新闻。在我的第一个视图中,我已经通过了上下文["某些事情"]来显示模板中的新闻列表。 现在我想要的是在csv中下载该新闻。我已为此写了一个视图

def CSVView(request):

response = HttpResponse(content_type="text/csv")
response["Content-Disposition"] = 'attachment; filename=somefilename.csv"'

some_val = request.session["something"]
print some_val
print "this"

writer = csv.writer(response)


writer.writerow(some_val)
return response

这是我下载csv的下一个视图。这里我要做的是下载过滤后的新闻。在我的第一个视图上下文["某事"]给出了新闻列表。我做了很多,但不知道如何得到它。最后,我试图从会话中获得contxt ["某些"]的价值,但我也失败了。如何将一个视图的值转换为另一个视图。或者任何人都能更好地了解如何下载上下文返回的新闻["某些内容"]。我究竟做错了什么。

1 个答案:

答案 0 :(得分:0)

context中设置数据并不会将其置于会话中。您需要在会话中设置数据以将其存储在那里。此外,直接在会话中存储对象不是一个好主意。您可能需要序列化它们。

更好的方法是创建您想要进入会话的pk个对象列表。

类似的东西:

def get_context_data(self, **kwargs):

    context = super(SingleNewsView,self).get_context_data(**kwargs)
    context["form"] = SearchForm
    if self.pub_from and self.pub_to and self.crawlers:
        qs = News.objects.filter(category_id=self.pk).filter(published_date__range=(self.pub_from,self.pub_to), crawler=self.crawlers)
    else:
        qs = News.objects.filter(category_id=self.pk)
    context["something"] = qs
    #set data in session
    self.request.session['something_pks'] = [ i.pk for i in qs ]
    return context

然后在CSVView中你可以用`request.session ['something_pks']获取它们并对对象进行查询。