2010-10-01 6 views
0

J'ai deux vues:variables Passing beween vues

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") 

Voici import.html:

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

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

utilisateur ouvert importContent() vue et appuyez sur le lien, qui ouvre doImport e() vue . Comment puis-je passer d-variable de la vue importContent() à la vue doImport()?

Répondre

2

Je peux penser à quelques façons d'aborder cela.

La première nécessite que vous ayez sessions activé. Dans ce mécanisme, la première vue stockera la variable dans la session de l'utilisateur et la seconde la récupèrera. Par exemple

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") 

La session peut également être remplacée par un cache personnalisé.

La seconde consiste à faire en sorte que la seconde recherche explicitement les données. C'est plus facile si les données sont limitées et ne nécessitent pas de calculs approfondis.

1

Si vous voulez renvoyer toutes les entrées à doImport, ce ne sera pas facile. La façon de passer un paramètre dans une requête est de le placer dans l'URL, d'utiliser une requête de post ou une session d'utilisation, mais cela nécessite plus de travail.

L'utilisation de l'URL n'est pas vraiment pratique car il y aura beaucoup de paramètres sur cette URL. L'utilisation d'une publication est un peu étrange et n'est pas adaptée à un lien html.

L'utilisation d'une session nécessite l'authentification et l'utilisation d'utilisateurs.

Tu ne peux pas appeler simplement:

d = get_some_data() 

à doImport à nouveau?

+1

Une session n'a pas besoin d'authentification - toute AnonymousUser aura son propre identifiant de session unique –

+0

Merci, je n'étais pas au courant de cela. –