2015-03-18 2 views
2

Я создаю веб-приложение, и главная страница - это то, где пользователь выбирает свое местоположение. Представление для шаблона домашней страницы запрашивает мою базу данных для списка местоположений и заполняет выпадающий список. После того, как пользователь набрал submit, я проверяю данные формы, и если они выбрали действительный город (т. Е. Он существует в моей базе данных), я хочу перенаправить их на другую страницу, которая отображает предложения дня для этого города. Мой вопрос основан на базовом дизайне представления/формы в Django. Как я могу передать город на следующую страницу? В основном я хочу сделать следующее:Django формирует и передает данные между видами/страницами

Главная страница -> отправить форму -> метод вызова для проверки формы -> Форма перенаправляет пользователя на другую страницу

Должен ли я создать отдельный вид Validate/страница для проверки ? Формы принимают параметр действия, поэтому я предполагаю, что мне нужно будет установить действие/validate /, которое вызовет мой метод validate_form() (через файл urls.py), который затем перенаправит их на соответствующую страницу.

Я просто хотел запустить свои мысли кем-то, прежде чем я пошел и реализовал его. Спасибо за ваше время.

+1

Вы уже заселение (в списке дд) действ v ales from db, зачем их повторять? – Niyojan

+0

Если кто-то делает инъекцию переднего плана и задает значение города для чего-то другого, кроме того, что я предоставил ... – farbodg

+0

Затем перейдите к тому, что говорит catavaran, проверка на завершающий этап – Niyojan

ответ

3

Почему вы хотите подтвердить город? Просто перенаправляйтесь в город, и если город не существует, появится страница 404.

ваш шаблон

<form action="{% url 'choose_city' %}" method="POST"> 
    <select name="city"> 
    {% for city in cities %} 
     <option value="{{ city.id }}">{{ city.name }}</option> 
    {% endfor %} 
    </select> 
    <button>Show deals</button> 
</form> 

urls.py

url(r'^choose/$', views.choose_city, name='choose_city'), 
url(r'^deals/(?P<city_id>\d+)/$', views.deals_by_city, name='deals_by_city'), 

views.py

from django.shortcuts import get_object_or_404, redirect, render 

def choose_city(request): 
    return redirect('deals_by_city', city_id=request.POST['city']) 

def deals_by_city(request, city_id): 
    city = get_object_or_404(City, pk=city_id) 
    deals = Deal.objects.filter(city=city) 
    return render(request, 'deals_by_city.html', {'city': city, 
                'deals': deals}) 
+0

Другой вопрос: я хочу использовать сеансы для хранения пользователей город, поэтому, когда они перемещаются по сайту, город сохраняется. Я устанавливаю request.session ['city'] в город пользователей, но у меня проблемы с просмотром. Как сохранить переменную сеанса? – farbodg

+1

Вы можете получить 'request.session.get ('city')' где угодно - ваши взгляды. Если пользователь не выбрал город, вы получите 'None'. – catavaran

+0

Спасибо. Я попробую еще раз. – farbodg

Смежные вопросы