Как ввести переменную из html в views.py в Django 2?

#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 для вас.

Прочитайте это для получения более подробной информации.