kamsikamsa
@kamsikamsa

Как подключить второе приложение Django?

Добрый день товарищи. Коротко о проблеме: упражняюсь с джанго, пишу сайт со страницами \главная, \блог, \проект. Сначала написал главную страницу 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'
Но не могу понять почему, я же везде его подключил, и юрл и сеттингс, вот такой у меня вопрос) ?
  • Вопрос задан
  • 1123 просмотра
Пригласить эксперта
Ответы на вопрос 2
@thepythonicway
Для вывода одинаковых объектов на разных страницах/приложениях гугли templatetags. Вопрос: зачем ты в admin.py импортируешь таблицу Article? Она уже зарегистрирована в другом приложении. В общем разберись с template тегами.
Ответ написан
@szelga
в INSTALLED_APPS добавили?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы