我对此非常困惑,我不知道该怎么做.. 我有一个视图,我列出了我的新闻表中的所有新闻。为了显示新闻,我在列表视图中传递了上下文数据。这是我的观点
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 ["某些"]的价值,但我也失败了。如何将一个视图的值转换为另一个视图。或者任何人都能更好地了解如何下载上下文返回的新闻["某些内容"]。我究竟做错了什么。
答案 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']获取它们并对对象进行查询。