django新手...如何吧一个view里面的列表变量传到另外一个view里面去?

具体是这样的:在尝试使用django开发一个书籍管理系统来熟悉django框架时,遇到了这样一个问题...在views.py中有下列代码:views.pydefquery... 具体是这样的:
在尝试使用django开发一个书籍管理系统来熟悉django框架时,遇到了这样一个问题...
在views.py中有下列代码:
views.py

def query_book_action(request, user_id):
context = {
'user_id': user_id,
}
user = get_object_or_404(Person, pk = user_id)
query_result = query_funs._query_book(user, book_name = request.POST['name'])

# debug:
# the query_result is a list
print 'in query_book action, the query_result is:'
print query_result

return HttpResponseRedirect(reverse('associate:query_book_result', args = (query_result,)))

def query_book_result(request, query_result):
# but here, query_result is a string....How to handle this problem....
print 'in query_book_result, the query result is:'
print query_result
context = {
'query_result': query_result
}
return render(request, 'associate/query_book_result.html', context)

其中urls.py中针对query_book_result的配置如下:
# wait to solve....
# ex: /associate/[Book:.....]/
url(r'^(?P<query_result>\[.*\])/query_book_result/$', views.query_book_result, name='query_book_result'),

其中输出的debug内容如下:
in query_book action, the query_result is:
[<Book: San Guo Yan Yi>, <Book: C Prime Plus>, <Book: Shui Hu Zhuang>]
[15/Aug/2014 11:21:57] "POST /associate/1/query_book_action/ HTTP/1.1" 302 0
in query_book_result, the query result is:
[<Book: San Guo Yan Yi>, <Book: C Prime Plus>, <Book: Shui Hu Zhuang>]

它这里输出没有问题,但是我发现在query_result中,这个query_result实际上是一个字符串...
因为在associate/query_book_result.html中,输出的内容如下所示...
Here are the informations

Name:

[

<

B

o

o

k

:
...
]
就是把整个给纵向输出了....
其中query_book_result.html中的代码如下:
Here are the informations

Name:
{% for book in query_result %}
{{ book }}
{% endfor %}

具体问题重点如下:

我把query_book_action中的query_result是成功传过去了,但是在query_result中得到的query_result却是一个字符串...这样我就没有办法对query_result里面的变量进行操作了...如何才能将query_result完整地传过去?而不是在另一个view里面仅仅得到一个字符串....
我尝试了一两天都试不出该怎么办...恳请高手们解答..谢谢....
展开
 我来答
heavensend
2014-08-15 · TA获得超过693个赞
知道小有建树答主
回答量:252
采纳率:95%
帮助的人:163万
展开全部

我们看这里

url(r'^(?P<query_result>\[.*\])/query_book_result/$', views.query_book_result, name='query_book_result'),

这里是捕获url里的参数,url本身是当做字符串来处理的,那么捕获的进来的参数,无疑一定是字符串

你可以稍作尝试,在query_book_result函数中加一行

 if isinstance(query_result,str):query_result='query_result is string here.'

用来验证

这里可以稍微处理一下,把字符串变成列表:

query_result = query_result.replace('[','').replace(']','').split(',')

但是实际上列表里的内容依然是字符串,不是key value的形式,但是单就输出来讲,循环输出是没问题了

更多追问追答
追问
那如果我要传整个对象..有什么办法吗
追答
通过url肯定是带不进去的,可是为什么你的query_book_result不能写成def query_book_result(request, user_id):
然后再调query_book_action return出query_result ,或者把这个函数的内容直接放在query_book_result函数内呢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式