【问题标题】:django variable of one view to another from session从会话到另一个视图的 django 变量
【发布时间】:2014-06-26 04:19:59
【问题描述】:

我对此很困惑,我不知道如何做到这一点.. 我有一个视图,其中列出了新闻表中的所有新闻。为了显示新闻,我在列表视图中传递了上下文数据。这是我的看法

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 格式的新闻。我还包括一个搜索表单来过滤新闻。在我的第一个视图中,我通过 context["something"] 来显示模板中的新闻列表。 现在我想要的是在 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 的下一个视图。在这里,我要做的是下载过滤后的新闻。在我的第一个视图中, context["something "] 给出了新闻列表。我做了所有但不知道如何得到它。最后,我试图从会话中获取 contxt["something"] 的值,但我也失败了。我怎样才能获得一种观点对另一种观点的价值。或者任何人都知道如何下载上下文 [“某物”] 返回的新闻。我究竟做错了什么。

【问题讨论】:

    标签: django session csv


    【解决方案1】:

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

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

    类似:

    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'] 获取它们并查询对象。

    【讨论】:

    • Thanx man.. 还有一个问题。如果我想在没有会话的情况下下载由 context["something"] 返回的新闻怎么办。我怎样才能做到这一点 ??有没有更简单的方法??
    • 您需要使用会话将数据传递给不同的视图。
    • 在我的 CSVView 中关注你之后,我做了 some_val = request.session["something_pks"] 它只给了我新闻的 id 而不是新闻.. 做什么
    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    相关资源
    最近更新 更多