Показать статистику
0 голосов
от (2.7тыс. баллов)

Привет, я изучаю джанго, создавая приложение погоды. Я не знаю, это правильный способ сделать это. Мне нужна форма в списке для добавления города пользователю, и я использую CBV. Но форма отсутствует на веб-сайте. Что я могу сделать?

views.py

from urllib import request
from django.shortcuts import render

import requests
from datetime import datetime
from .models import City
from pytz import timezone
from django.views.generic import ListView

from .forms import CityForm
from django.views.generic.edit import FormMixin, FormView


class Cities(FormMixin,ListView):
    model=City
    template_name='home.html'
    form_class=CityForm
    success_url='/'


    def get_context_data(self, *, object_list=None, **kwargs):
        context =super(Cities, self).get_context_data(**kwargs)
        
        weather_data=[]

        for city in City.objects.all():
            url=f'https://api.openweathermap.org/data/2.5/weather?q={city}'
            data=requests.get(url).json()
 
            if data["cod"] != "404":

                now_asia =datetime.fromtimestamp(data['timezone']).strftime('%a,%b %d %Y')
                payload={   'city':data['name'],
                    'weather':data['weather'][0]['main'],
                    'icon':data['weather'][0]['icon'],
                    'fahrenheit':data['main']['temp'],
                    'celsius':int(data['main']['temp']-273),
                    'pressure':data['main']['pressure'],
                    'humidity':data['main']['humidity'],
                    'description':data['weather'][0]['description'],
                    'date' :now_asia,

                    }

                weather_data.append(payload)
            else:
                weather_data={'invalid_city':f'{city} City not found.\n Enter valid city'}
        print(context)
        context={'weather_data':weather_data}
        return context

forms.py

from django.forms import ModelForm
from .models import City


class CityForm(ModelForm):
    class Meta:
        model=City
        fields=['name']

home.html

    {% csrf_token %}
    {{form}}
    <button class="btn" type="submit" >Add city</button>

 описание изображения здесь

151 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

В get_context_data измените в конце

   context['weather_data'] = weather_data
   return context

Вы просто хотите добавить еще один ключ, но не перезаписывать весь контекст

...