Добрый день товарищи. Коротко о проблеме: упражняюсь с джанго, пишу сайт со страницами \главная, \блог, \проект. Сначала написал главную страницу startapp mainApp в models.py прописал
from django.db import models
from datetime import date
from django.urls import reverse
class Article(models.Model):
"""Статьи"""
title = models.CharField("Название", max_length=100)
tagline = models.CharField("Слоган", max_length=100, default='')
description = models.TextField("Описание")
poster = models.ImageField("Постер", upload_to="poster/")
year = models.PositiveSmallIntegerField("Дата выхода", default=2019)
url = models.SlugField(max_length=130, unique=True)
draft = models.BooleanField("Черновик", default=False)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("article_namber", kwargs={"slug": self.url})
class Meta:
verbose_name = "Статья"
verbose_name_plural = "Статьи"
Зарегистрировал это дело в admin.py
from django.contrib import admin
from .models import Article
admin.site.register(Article)
Во views прописал:
from django.shortcuts import render
from django.views.generic.base import View
from .models import Article
class ArticlesView(View):
"""вывод статей блога на главную"""
def get(self, request):
mainApps = Article.objects.filter(draft=False)
return render(request, "mainApp/main.html", {"main_list": mainApps})
class ArticlesDetailView(View):
"""полное описание статей"""
def get(self, request, slug):
mainApp = Article.objects.get(url=slug)
return render(request, "mainApp/main_detail.html", {"article": mainApp})
И в Urls прописал
from django.urls import path
from .import views
urlpatterns = [
path("", views.ArticlesView.as_view()),
path("<slug:slug>/", views.ArticlesDetailView.as_view(), name='article_namber')
]
Вот таким образом вывожу статьи на главную страницу(после буду выводить только три статьи с блога), все работает, все красиво. Но и этиже самые статьи я хочу выводить и в блог, с пагинацией со всеми радостями, создать новое приложение, скопировать один в один модели юрл и вьюс а потом дважды все прописывать в админке это как то не по канонам, следовательно нужно не повторяться, не писать одно и тоже несколько раз.
Далее начал писать приложение под блог. startapp mainBlog, и тут меня ждали разного рода засады.
Не могли бы подсказать как примерно это реализовать. Возможно все полностью переписать? т.к. все таки эти модели относятся к блогу, а на главную буду выводить только три крайних.
После создания нового приложения я вписал в admin.py
from django.contrib import admin
from mainApp.models import Article
Так можно вообще делать? я нахожусь в mainBlog а импортирую с mainApp?
Во views.py
from django.shortcuts import render
from django.views.generic.base import View
from mainApp.models import Article
class ArticlesView(View):
"""вывод статей в блог"""
def get(self, request):
mainBlogs = Article.objects.filter(draft=False)
return render(request, "mainBlog/main.html", {"mainB_list": mainBlogs})
В Юрлс
from django.urls import path
from .import views
urlpatterns = [
path("blog/", views.ArticlesView.as_view()),
]
Вопрос мне в models.py нужно что то писать?
в главном Юрл прописал
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path("", include("mainApp.urls")),
path("blog/", include("mainBlog.urls")),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Темплейт вынес в папку корня и в сеттингс прописал 'DIRS': [os.path.join(BASE_DIR, 'templates')],
папрка темплейтс выглядит так
>templates
в ней include, mainApp, mainBlog и base.html (главный шаблон)
в include лежит header footer
в mainApp лежит base.html main.html main_detail.html
в mainBlog лежит main.html
Сейчас после команды рансервер пишет ModuleNotFoundError: No module named 'mainBlog'
Но не могу понять почему, я же везде его подключил, и юрл и сеттингс, вот такой у меня вопрос) ?