在视图之间传递变量

时间:2010-10-01 12:17:52

标签: django

我有两种观点:

def importContent(request):    
    d = get_some_data()
    t = get_template('import.html')
    c = Context({'entries' : d.entries })

    return HttpResponse(t.render(c))

def doImport(request):
    return HttpResponse("hey")

这是import.html:

{% for entry in entries %} 
    {{ entry.title}} <br> 
{% endfor %}

<a href="/do_import">soo</a>

用户打开importContent()视图并按链接,打开doImport()视图。如何将d-variable从importContent()视图传递到doImport()视图?

2 个答案:

答案 0 :(得分:2)

我可以想到几种方法来解决这个问题。

首先要求您启用sessions。在此机制中,第一个视图将变量存储在用户的会话中,第二个视图将检索它。对于例如

def importContent(request):    
    d = get_some_data()
    t = get_template('import.html')
    c = Context({'entries' : d.entries })
    request.session['entries'] = d
    return HttpResponse(t.render(c))

def doImport(request):
    if 'entries' in request.session:
        d = request.session['entries']
    else:
        d =  # Perform a look up or show a message etc.
    return HttpResponse("hey")

会话也可以用自定义缓存替换。

第二个是让第二个显式查找数据。如果数据有限且不需要任何大量计算,这将更容易。

答案 1 :(得分:1)

如果要将所有条目传递回doImport,这并不容易。在请求中传递参数的方法是将它们放在url中,使用post请求或使用session,但这需要更多的工作。

使用URL并不是很方便,因为该网址上会有很多参数。

使用帖子有点奇怪,不适合html链接。

使用会话需要验证和使用用户。

你不能打电话:

d = get_some_data()
再次在doImport中