Ajax-вызов запускается при отправке формы и будет передавать данные в отдельный шаблон views.py
Я создаю веб-приложение с использованием Django. У меня есть функция поиска на моей индексной странице. Когда пользователь отправляет форму, должен быть выполнен вызов AJAX. Этот AJAX вызов должен взять все необходимые данные из формы и передать их в совершенно отдельный шаблон views.py, который будет делать API GET запросы, используя эти данные, и создавать новую страницу, используя этот отдельный шаблон.
На данный момент он не загружает отдельный шаблон views.py, я не уверен, правильно ли я передаю данные, однако я вижу /searchresults?searchType=data1&executeLocation=data2
в моей консоли, потому что мой AJAX вызов возвращается на success
в настоящее время. Можно предположить, что у меня есть все необходимые данные в переменных data1 и data2, мне просто нужна помощь в перенаправлении на новую страницу и передаче данных вместе с перенаправлением.
Мой код:
urls.py
# The home page
path('', views.index, name='home'),
# Search results page
path('searchresults', views.search_results, name='searchresults'),
AJAX
function getSearchResults(searchType,executeLocation,csrf_token)
{
$.ajax(
{
type: $(this).attr('method'),
url: "searchresults", //The URL you defined in urls.py
data :
{
searchType: searchType,
executeLocation: executeLocation,
csrfmiddlewaretoken: csrf_token
},
dataType: 'text',
success: function(response) // currently executes success (but not correct outcome)
{
console.log(response);
alert('winner winner chicken dinner');
},
error: function(response)
{
console.log(response);
alert('failure');
}
}).done(function(data)
{
console.log(data)
});
}
index.html
<form method="POST" action="{% url 'searchresults'%}">
...
<button type="submit" onclick="getSearchResults('data1','data2','{{csrf_token}}')">Submit</button>
</form>
views.py
def search_results(request):
context = {}
context['requestData'] = request.POST
html_template = loader.get_template('search/searchresults.html')
return HttpResponseRedirect(html_template.render(context, request))
Приемлемое решение должно быть способно выполнять следующие задачи:
- Перенаправить пользователя на страницу результатов поиска
- Передать данные формы на страницу результатов поиска каким-либо образом
После помощи @AminMir я смог получить рабочее решение. Оказалось, что мне не нужен AJAX, но мне нужен файл forms.py.
view.py
def index(request):
context = {'segment': 'index'}
context['SearchForm'] = SearchForm()
return HttpResponse(html_template.render(context, request))
forms.py
from django import forms
class SearchForm(forms.Form):
searchType = forms.CharField(max_length = 100)
executedLocation = forms.CharField(max_length = 100)
searchValue = forms.CharField(max_length = 100)
index.html
<form method="POST" action="{% url 'searchresults'%}">
{% csrf_token %}
{{ SearchForm.as_ul }}
<input type="submit" value="submit">Search</button>
</form>
Затем эта форма отправит мои данные в файл views.py для страницы search_result, которая останется без изменений