Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

9.2 Подготовка проекта, добавление подтверждения регистрации
3 из 3 шагов пройдено

Давайте теперь создадим отдельное Django приложение, которое отвечает за посты:

python manage.py startapp publish


Давайте определим простую модель Post в publish/models.py:

from django.db import models
from django.utils import timezone
from django.contrib.auth import get_user_model

User = get_user_model()


class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created = models.DateTimeField('Created Date', default=timezone.now)
    title = models.CharField('Title', max_length=200)
    content = models.TextField('Content')
    slug = models.SlugField('Slug')

    def __str__(self):
        return '"%s" by %s' % (self.title, self.author)


Привяжем модель Post с  администратором Django, для этого в файле publish/admin.py добавим следующий код:

from django.contrib import admin
from .models import Post


@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    pass


Наконец, давайте подключим приложение publish к нашему проекту, добавив его в список INSTALLED_APPS.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'main',
    'publish',
]

Не забываем выполнить миграции и теперь мы можем запустить сервер, перейти к http://localhost:8000/admin/ и создать наши первые посты, чтобы у нас было то, с чем можно взаимодействовать:


Давайте двигаться дальше. Следующий очевидный шаг - создать способ просмотра опубликованных постов. Для этого в publish/views.py добавим:

from django.shortcuts import render, get_object_or_404
from .models import Post


def view_post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render(request, 'post.html', context={'post': post})


Давайте свяжем наше новое представление с URL-адресом в: django_celery/urls.py

from django.contrib import admin
from django.urls import path, include
from publish.views import view_post

urlpatterns = [
    path('admin/', admin.site.urls),
    path('<slug:slug>/', view_post, name='view_post'),
]


Наконец, давайте создадим шаблон, который отображает пост:/templates/post.html.

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1>{{ post.title }}</h1>
    <p>{{ post.content }}</p>
    <p>Published by {{ post.author.first_name }} on {{ post.created }}</p>
</body>
</html>


Подключим директорию шаблонов templates в секции TEMPLATES в файле настроек settings.py, отредактируем его содержимое таким образом:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'], # new
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]


Теперь мы можем перейти к http://localhost:8000/my_first_post/ в браузере. Это не совсем чудо веб-дизайна, но создание красивых страниц постов выходит за рамки этого урока.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

после админки добавьте упоминание про миграции, а то будут писать почему у меня ошибка!

@No_Name, Спасибо, добавили.

Не находило шаблон пока не добавил в settings в TEMPLATES 

"DIRS": [BASE_DIR / 'templates'],
Изменен Николай Петров

@Николай_Петров, спасибо, добавил.