Использовать сеансы Django в URL

В настоящее время я использую Django, чтобы пользователи вводили информацию через форму, а затем данные сохранялись как сеанс. Затем я использую этот сеанс для вызова введенных данных в других представлениях. Мне было интересно, можно ли использовать эти введенные данные, хранящиеся в этих сеансах, в моих URL-адресах?

def search(request):
    result = {}

    context = RequestContext(request) 

    t = request.session.get("tick")

    if request.method == 'POST':
        search = Search(data=request.POST)


        if search.is_valid():
            ticker = search.cleaned_data['search']

            request.session["tick"] = ticker

        else:
            print search.errors
    else:
        search = Search()

    return render_to_response('ui/search.html', {"result":result}, context) 

и вот мой соответствующий urls.py:

url(r'^search/$', views.search, name='search'),

Можно ли каким-либо образом использовать сеанс, сохраненный как 't = request.session.get("tick")' в моих URL-адресах, чтобы я мог получить URL-адреса, соответствующие данным, введенным пользователем? Например, если пользователь ввел «привет», мои URL-адреса будут отображаться /search/hello.

Спасибо.


person ng150716    schedule 19.06.2014    source источник


Ответы (1)


Да, вы можете сделать это так:

urls.py

url(r'^search/$', views.search, name='search'),
url(r'^search/(?P<query>.+)/$', views.search, name='search'),

просмотры.py

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

def search(request, query=None):
    result = {}
    context = RequestContext(request) 

    if request.method == 'POST':
        search = Search(data=request.POST)
        if search.is_valid():
            ticker = search.cleaned_data['search']
            return HttpResponseRedirect(reverse('search', kwargs={'query': ticker}))
        else:
            print search.errors
    else:
        search = Search()

    return render_to_response('ui/search.html', {"result":result}, context) 
person Eugene Soldatov    schedule 19.06.2014