2015-03-19 12 views
6

Sto costruendo il mio primo sito con django 1.7 e sto avendo difficoltà a capire come passare una variabile da un clic a una vista. Anche il mio GET è vuoto.Passare la variabile dal modello django per visualizzare

Il mio modello ha una tabella con gli ID account di Facebook, quando cliccato dovrebbe mostrare un elenco di pagine di Facebook che gli amministratori degli utenti.

mio modello:

{% for SocialAccount in accountlist %} 
    <tr> 
     <td><a href="{% url 'INI:fbpages' %}">{{ SocialAccount.uid }}</a></td> 
     <td>{{ SocialAccount.extra_data.first_name }}</td> 
     <td>{{ SocialAccount.extra_data.last_name }}</td> 
     <td>{{ SocialAccount.extra_data.email }}</td> 
    </tr> 
{% endfor %} 

e mio punto di vista:

def fbpages(request, fbuser): 
    djuser = request.user.id 
    context = RequestContext(request) 
    fbuser = 1234634 
    pagelist = facebook.pages(request, djuser, fbuser) 
    blocks = {'title': 'Facebook Pages', 
      'pagelist': pagelist} 
    return render(request, "initiative/ListFBPages.html", blocks) 

ho potuto farlo facilmente se metto l'ID nell'URL, ma io non voglio esporre una pagina/utente ID nell'URL. Mi sembra che ci sia una soluzione facile ma non l'ho capito.

Grazie per il vostro aiuto.

+1

Non c'è un modo speciale per fare questo in Django. È solo l'HTTP di base. Usa un modulo. Non lo vuoi nell'URL? Usa una richiesta 'POST'. –

risposta

17

È possibile inviare dati alle viste Django dal modello in 4 metodi diversi. Nel tuo caso, probabilmente sarai in grado di utilizzare le opzioni 1 e 4 solo se non vuoi le informazioni nell'URL.

Dato che io sono nuovo a StackOverflow, non posso postare più di 2 collegamenti in modo se si cerca il seguente post troverete ulteriori informazioni sui vantaggi e gli svantaggi di ciascun metodo.

"Che cosa è un modo più efficiente per passare le variabili da modello per visualizzare in Django"

1. Messaggio

Così si presenterà un modulo con un valore.

# You can retrieve your code in your views.py via 
    request.POST.get('value') 

2. Parametri query

Così si passerebbe // localhost: 8000/id = 123

# You can retrieve your code in your views.py via 
    request.GET.get('id') 

3. Dal URL (vedi here per esempio)

Così si passa // localhost: 8000/12/results/

# urls.py 
    urlpatterns = patterns(
     ... 
     url(r'^(?P<question_id>\d+)/results/$', views.results, name='results'), 
     ... 
    ) 

e nelle viste ...

# views.py 
    # To retrieve (question_id) 
    def detail(request, question_id): 
     ... 
     return HttpResponse("blahblah") 

4. Session (tramite cookie)

svantaggio di usare sessione è che si sarebbe dovuto passare alla vista o impostalo prima.

https://docs.djangoproject.com/en/1.7/topics/http/sessions/

# views.py 
    # Set the session variable 
    request.session['uid'] = 123456 

    # Retrieve the session variable 
    var = request.session.get['uid'] 
+0

Grazie Jester. Penso che andrò con l'opzione 1. Stavo usando url in precedenza e ha funzionato bene, ma non voglio che gli utenti manipolino l'url per vedere le pagine di altri utenti e gli account collegati. Ho provato a sperimentare con il decoratore richiesto, ma penso che le mie abilità siano ancora troppo per principianti. – Kevork

+0

Puoi ampliare ancora un po 'il secondo metodo? Più specificamente, come posso impostare i parametri di query (se il '? ...' è quello) in un modello? –

+0

Il 2o metodo passa una variabile attraverso il parametro url. Per esempio se lo hai fatto. http://127.0.0.1:8000/page/?id=200 puoi prendere la variabile id usando request.GET.get ('id'). In questo caso request.GET.get ('id') restituirebbe "200". – JJK

Problemi correlati