L'idée est d'afficher un champ de recherche, où un utilisateur peut taper dans l'adresse, qui est complétée par Google Autocomplete. Ensuite, nous sauvegardons les paramètres lat et long et redirigeons vers le /search
(en utilisant POST) ou (peut-être utiliser une requête GET) ou alternativement /search?lat=xxx&long=xxx
.Demande POST avec une action de formulaire sur une autre page renvoie 405, ne traite pas request.POST
Pour le second cas, avec des paramètres d'URL que je pourrais utiliser lat = request.GET('lat')
Ma forme Index.html
<form action="{% url 'users:index' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input id="searchTextField" type="text" size="50" placeholder="Enter a location" autocomplete="on" runat="server" />
<input type="hidden" id="cityname" name="cityname" />
<input type="hidden" id="Lat" name="Lat" />
<input type="hidden" id="Lng" name="Lng" />
<button type="submit">Submit</button>
</form>
Lorsque choix de l'utilisateur dans le menu déroulant, le javascript me donne des valeurs de Lat
, Lng
et cityname
. À soumettre, ils sont redirigés vers /users/
, qui est un ListView et a le views.py
class IndexView(ListView):
# context_object_name = 'latest_teacher_list'
model = Teacher
def get_context_data(self, **kwargs):
if self.request.method == 'POST' and 'Lat' in self.request.POST:
if self.request.POST['Lat'] != '':
lat = self.request.POST['Lat']
else:
lat = None
else:
lat = None
context = super(IndexView, self).get_context_data(**kwargs)
context['teacher_list'] = Teacher.objects.all()[:5]
context['lat'] = lat
return context
suivante Cependant, cela me donne une page blanche lorsque je soumets le formulaire. Lorsque form action
est vide, il soumet le formulaire à la même page et affiche correctement Lat, Long. Mais lorsque l'action de formulaire est /users/
, il me donne une erreur 405.
Une telle chose est-elle possible, ou dois-je faire une requête GET, par ex. transmettre les paramètres d'URL comme un lien, donc au lieu d'une forme, je vais simplement un lien vers:
users?lat=xxx&long=xxx
où je dois utiliser Js pour remplir xxx en quelque sorte
Avez-vous défini la méthode Post dans votre vue? – WebGuy
Je pense que cela pourrait être le problème ... laissez-moi vérifier – Roma
Ce code de réponse (405) peut provenir d'un certain nombre de problèmes, mais il finit généralement soit que vous utilisez la mauvaise URL ou en utilisant la méthode de demande erronée. – WebGuy