2015-03-19 15 views
6

Buduję swoją pierwszą witrynę z django 1.7 i mam problem z określeniem sposobu przekazania zmiennej z kliknięcia do widoku. Moje GET jest również puste.Przekazywanie zmiennej z szablonu django do widoku

Mój szablon ma tabelę z identyfikatorami kont Facebooka, po kliknięciu powinna wyświetlić listę stron Facebooka, które administruje użytkownikami.

Mój szablon:

{% 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 %} 

i mój widok:

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) 

mogę to zrobić z łatwością, jeśli mogę umieścić identyfikator w URL, ale nie chcę, aby odsłonić stronę/użytkownik ID w adresie URL. Czuję, że jest łatwe rozwiązanie, ale nie odkryłem tego.

Dzięki za pomoc.

+1

Nie ma specjalny sposób to zrobić w Django. To tylko podstawowe HTTP. Użyj formularza. Nie chcesz tego w adresie URL? Użyj żądania 'POST'. –

Odpowiedz

17

Możesz wysyłać dane do widoków Django z szablonu w 4 różnych metodach. W twoim przypadku prawdopodobnie będziesz mógł używać opcji 1 i 4, jeśli nie chcesz, aby informacje znajdowały się w adresie URL.

Ponieważ jestem nowy na StackOverflow, nie mogę dodawać więcej niż 2 linki więc jeśli szukać następujące stanowisko znajdziesz więcej informacji na temat zalet i wad każdej metody.

„co jest bardziej efektywny sposób przekazać zmienne z szablonu, aby zobaczyć w Django”

1. post

Więc chcesz złożyć formularz z wartości.

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

2. Parametry zapytania

więc minie // localhost: 8000/id = 123

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

3. Od URL (Patrz here na przykład)

Przekazywałbyś // localhost: 8000/12/results/

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

iw widokach ...

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

4. Sesja (przez ciasteczka)

Minusem korzystania z sesji jest pan musiałby przekazać je do widoku lub ustaw wcześniej.

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

Dziękuję Jester. Myślę, że skorzystam z opcji 1. Używałem adresów URL wcześniej i działało dobrze, ale nie chcę, aby użytkownicy manipulowali adresem URL, aby zobaczyć strony innych użytkowników i powiązane konta. Próbowałem eksperymentować z pozwoleniem wymaganym dekoratorem, ale myślę, że moje umiejętności są zbyt początkujące. – Kevork

+0

Czy możesz rozszerzyć nieco więcej na drugą metodę? Dokładniej, jak mogę ustawić parametry zapytania (jeśli "? ..." jest to) w szablonie? –

+0

Druga metoda polega na przekazywaniu zmiennej przez parametr adresu URL. Na przykład, jeśli tak. http://127.0.0.1:8000/page/?id=200 można pobrać zmienną id za pomocą request.GET.get ("id"). W tym przypadku request.GET.get ("id") zwróci "200". – JJK

Powiązane problemy