Я не могу понять, что я делаю не так, во втором приложении моего проекта под названием «Погода». Первая часть, «дом», работает нормально. Я сделал так, чтобы пустой URL-адрес '' и URL-адрес с '/ home /' отображались на домашней странице. Даже ссылка, которую я создал на своей панели навигации на главную страницу, работает, но это не относится к ссылке погоды. Я получаю сообщение об ошибке «Страница не найдена 404».
Вот обзор: Структура проекта
Я включил приложение «Погода» в настройках установленных приложений.
Здесь файл urls.py в основной папке проекта:
from django.contrib import admin
from django.urls import path, include
from weather import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
path('', include('weather.urls')),
]
Файл urls.py для моего приложения погоды:
from weather import views
from django.urls import path
urlpatterns = [
path('', views.GetWeather.as_view(), name='weather'),
]
views.py для приложение погоды:
from django.views import generic
import requests
from django.shortcuts import render
from .models import City
from .forms import CityForm
class GetWeather(generic.ListView):
queryset = City.objects.order_by('-requested')
template_name = 'weather.html'
def index(request):
url = 'http://api.openweathermap.org/data/2.5/weather?q={}&units=imperial&appid=c5a079de62bccff63d64ac8989f87e37'
form = CityForm()
cities = City.objects.all()
weather_data = []
for city in cities:
r = requests.get(url.format(city)).json()
city_weather = {
'city' : city.name,
'temperature' : r['main']['temp'],
'description' : r['weather'][0]['description'],
'icon' : r['weather'][0]['icon'],
}
weather_data.append(city_weather)
context = {'weather_data' : weather_data, 'form' : form}
return render(request, 'templates/weather.html', context)
models.py для приложения погоды:
from django.db import models
from django.contrib.auth.models import User
class City(models.Model):
name = models.CharField(max_length=30)
requested = models.DateTimeField(auto_now_add = True)
class Meta:
ordering = ['-requested']
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'cities'
Погода. html шаблон:
<!DOCTYPE html>
{% extends "base.html" %}
{% block content %}
<html>
<style>
body {
font-family: "Roboto", sans-serif;
font-size: 18px;
background-color: rgba(0, 0, 0, .75);
}
.head_text{
color: white;
}
.card{
box-shadow: 0 16px 48px #E3E7EB;
}
</style>
<div class="container">
<div class="row">
<div class="col-md-8 mt-3 left">
{% for city_weather in weather_data %}
<div class="card mb-4">
<div class="card-body">
<h2 class="media-left">
<figure class="image is-50x50">
<img src="http://openweathermap.org/img/w/{{ city_weather.icon }}.png" alt="Image">
</figure>
</h2>
<div class="media-content">
<div class="content">
<p>
<span class="title">{{ city_weather.city }}</span>
<br>
<span class="subtitle">{{ city_weather.temperature }}° F</span>
<br> {{ city_weather.description }}
</p>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</html>
{% endblock content %}
Это the blog.urls:
from . import views
from django.urls import path
urlpatterns = [
path('', views.PostList.as_view(), name='home'),
path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
]
Я очень благодарен всем, кто нашел время, чтобы прочитать это и помочь мне.