#python #html #django #django-forms #django-views
#python #HTML #django #django-формы #django-просмотры
Вопрос:
Я пробовал несколько способов, но ни один из них не сработал. Кнопка должна очищать погоду от города, введенного в текстовое поле. Вся очистка работает, когда я жестко кодирую название города, но я не знаю, как получить это название города из HTML-формы views.py
.
html
:
<form method="POST "action="{% url 'weather' %}">
{% csrf_token %}
<input type="text" value="{{ city }}">
<button type="submit" class="btn btn-info">Get my weather</button>
</form>
views.py
def scrape_weather(request):
old_weather = Weather.objects.all()
old_weather.delete()
api_adress = "http://api.openweathermap.org/data/2.5/weather?q="
api_key = "amp;appid=3a99cf24b53d85f4afad6cafe99d3a34"
city = input()
#city = "warsaw"
url = api_adress city api_key
json_data = requests.get(url).json()
new_weather = json_data['weather'][0]['main']
degree_kelvin = int(json_data['main']['temp'])
degree = degree_kelvin-273
pressure = json_data['main']['pressure']
new_weather = Weather()
new_weather.degree = degree
new_weather.pressure = pressure
new_weather.weather = new_weather
new_weather.save()
if request.method == 'POST':
form = CityForm(request.POST)
if form.is_valid():
pass
else:
form = CityForm()
return render(request, "news/home.html", {'form': form})
forms.py
:
from django import forms
class CityForm(forms.Form):
city = forms.CharField(max_length=30)
if not city:
raise forms.ValidationError('You have to write something!')
Ответ №1:
Это не имеет никакого отношения к очистке или инъекции. Чтобы браузер отправлял значение из поля ввода, элемент field должен иметь name
атрибут.
<input type="text" name="city">
а затем получить его в представлении:
city = request.POST.get("city")
Обратите внимание, я совсем не уверен, почему у вас есть CityForm, вы его не используете.
Ответ №2:
В вашем шаблоне вы можете:
<form method="POST "action="{% url 'weather' %}">
{% csrf_token %}
{{ form }}
<button type="submit" class="btn btn-info">Get my weather</button>
</form>
Это будет управлять всеми атрибутами виджета (в данном случае ввода текста), такими как name
для вас.
Прочитайте это для получения более подробной информации.